E2370 Einfacher Typenname erwartet (C++)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Compiler-Fehler und -Warnungen (C++) - Index

Um die Interoperabilität zwischen Delphi und C++ sicherzustellen, gibt es Einschränkungen zu den Typennamen in den Parameterlisten der Typen "published closure". Die Parametertypen müssen einfache Typennamen mit dem optionalen Modifizierer "const" sein und in Zeiger- oder Referenznotation formuliert werden.

Wenn Sie einen closure-Typ definieren, müssen die Argumente, die an diesen Typ übergeben werden, den Typ "simple" haben. Templates werden beispielsweise nicht unterstützt. Um eine Referenz auf ein Objekt mit dem Typ "template" an ein "closure" zu übergeben, müssen Sie ein typedef deklarieren, das zu den simple-Typennamen zählt.

Beispiel:

 #include <System.hpp>

 template <typename T>
 struct SomeTemplateType{ T t; };

 struct TCppTest : public TObject
{
  // Bad
  typedef void __fastcall (__closure *foo1)(SomeTemplateType<int> *);

  // Good
  typedef SomeTemplateType<int> SimpleTypeName;
  typedef void __fastcall (__closure *foo2)(SimpleTypeName *);

  foo1 FProp1;
  foo2 FProp2;
 __published:
  __property foo1 prop1 = { read=FProp1 };  // Error
  __property foo2 prop2 = { read=FProp2 };  // Ok
};