AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Method Resolution Clause --> Undeclared Identifier
Thema durchsuchen
Ansicht
Themen-Optionen

Method Resolution Clause --> Undeclared Identifier

Ein Thema von Aviator · begonnen am 16. Jan 2017 · letzter Beitrag vom 16. Jan 2017
 
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#1

Method Resolution Clause --> Undeclared Identifier

  Alt 16. Jan 2017, 17:20
Hallo Delphianer,

ich habe gerade ein sehr kurioses Problem. Ich habe drei Interfaces die voneinander nichts wissen. Also keine Ableitung kein gar nix. Alle drei Interfaces stellen die Methode Init() bereit. Jetzt habe ich eine Klasse die alle drei Interfaces implementiert.

Jetzt muss ich ja die Init Methoden von mindestens zwei Interfaces so implementieren, damit der Compiler weiß, welche Methode gemeint ist (Method Resolution Clause).

Bei zwei Interfaces funktioniert das auch problemlos, aber sobals das dritte Interface hinzu kommt, erhalte ich den Fehler, dass die Methode nicht deklariert sei.

Beispiel:

Delphi-Quellcode:
IInterface1 = interface
  function Init: Boolean; stdcall;
end;

IInterface2 = interface
  function Init: Boolean; stdcall;
end;

IInterface3 = interface
  function Init: Boolean; stdcall;
end;
Delphi-Quellcode:
TTestClass = class(TInterfacedObject, IInterface1, IInterface2, IInterface3
private
  function I2Init: Boolean;
  function I3Init: Boolean;
public
  function Init: Boolean; // Init aus IInterface1
  function IInterface2.Init = I2Init;
  function IInterface3.Init = I3Init;
end;
Sobald ich jetzt F9 drücke erscheint die Meldung "Undeklarierter Bezeichner: I3Init". Nehme ich die Method Resolution Clause (MRC) von I3Init raus (auskommentieren), dann wird mir nur die Meldung "I3Init wurde deklariert aber nie verwendet" ausgegeben. Eine Fehlermeldung das Init aus IInterface3 nicht implementiert sei erscheint nicht. Ist auch klar, weil ich ja eine Init Methode ohne MRC implementiert habe. Sobald ich dann die Methode aus IInterface1 auch mit einer MRC versehe erscheint auch die Meldung, dass Init aus IInterface3 nicht implementiert ist. Ist ja dann auch korrekt.

Jetzt kommt es aber. Versehe ich alle Methoden mit einer MRC, dann erscheint bei zwei ein Fehler (IInterface1 und IInterface3).

Wenn ich jetzt die MRC für I3Init rausnehme, dann meldet er auch, dass I3Init deklariert aber nicht verwendet wurde. Also er findet die Methode, aber nur wenn die MRC nicht eingetragen ist.

Weshalb ist das so? Ich hoffe mir kann jemand helfen. Ich hoffe ich übersehe nur etwas. So kann ich mein Projekt nämlich nicht mehr kompilieren.


Vielleicht als abschließende Frage weil es irgendwo zum Thema passt: Warum kann ich keine Direktiven (wie z.B. stdcall ) bei den Methoden angeben die ich mit einer MRC auflösen musste?
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz