In einigen Code, den ich bis zur Festsetzung, die starke Nutzung von Generika und eine Schnittstelle Typen macht, erhalte ich FehlerWas bedeutet der Delphi-Compiler-Fehler E2134?
E2134, Type '<void>' has no type info.
Ich glaube, es liegt daran, dass ich in der Mitte eines Refactoring bin, wo einige tief verschachtelten Satz von Einheiten, die alle Generics verwenden, sind nicht synchronisiert, aber der Fehler tritt nicht an einem Ort auf, an dem ich die Fehlermeldung verwenden kann, um den Code zu beheben, da an dem Ort, an dem der Fehler auftritt, nichts falsch mit dem Code ist . Hier
ist der Kontext, verspottet, weil ich den Code nicht veröffentlichen kann, gibt es zu viel:
unit GenericThing;
...
interface
...
type
...
IThingListOf<ThingT> = interface(IThingContainer)
function getEnumerator: TEnumerator<ThingT>;
function getCount: Integer;
function getThing(Index: integer): ThingT;
function getFirst: ThingT;
function IndexOf(value: ThingT): integer;
function addItem(const Thing: ThingT): ThingT;
function removeItem(const Thing: ThingT): Integer;
procedure clear;
procedure Sort; overload;
procedure Sort(const AComparer: IComparer<ThingT>); overload;
property Count: integer read getCount;
property First: ThingT read getFirst;
property Items[Index: integer]: ThingT read getThing; default;
end;
// error appears on whatever line number comes after the declaration of IThingListOf<ThingT>...end;
function AnythingYouLikeHere:Integer; // there is nothign wrong with this line, but you get the E2134 here.
Es scheint, dass das Problem in IThingContainer selbst:
IThingContainer = interface ...
...
procedure DoSomething(const Param);
end;
der oben "const Param" hat keine Typinformationen. Das ist meiner Meinung nach eine seltsame (Achsel) von Pascal/Delphi, in der Sie Wirths Idee des starken Tippens völlig verletzen. Es ist ungefähr so schwach typisiert wie ein "void *" -Zeiger in C oder der "Zeiger" -Typ in Delphi, aber es wird selten benutzt, außer an Orten wie den Standard-pre-object-pascal RTL-Funktionen wie Move und so auf. Meiner Meinung nach sollten untypisierte Parameter in Schnittstellen, die in Generika verwendet werden, entweder erlaubt oder nicht erlaubt sein, aber manchmal nicht erlaubt und andere Male nicht erlaubt sein.
Dies ist ein Fall einer Pascal-Funktion von 1978 schlecht mit einem Object Feature von 2009
BRILLIANT. Vielen Dank. –