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
Antwort Antwort
Aviator

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

Method Resolution Clause --> Undeclared Identifier

  Alt 16. Jan 2017, 16: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
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Method Resolution Clause --> Undeclared Identifier

  Alt 16. Jan 2017, 16:49
Delphi-Quellcode:
TTestClass = class(TInterfacedObject, IInterface1, IInterface2, IInterface3 )
private
  function I2Init: Boolean; stdcall;
  function I3Init: Boolean; stdcall;
public
  function Init: Boolean; stdcall;// Init aus IInterface1
  function IInterface2.Init = I2Init;
  function IInterface3.Init = I3Init;
end;
Das funktioniert hier einwandfrei
Fritz Westermann
  Mit Zitat antworten Zitat
Aviator

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

AW: Method Resolution Clause --> Undeclared Identifier

  Alt 16. Jan 2017, 16:52
Hmm merkwürdig. Meine Interfaces sind zwar etwas größer und es gibt auch mehrere gleichnamige Funktionen darin, aber ich habe auch schonmal aus dem einem Interface (das bei dem er erstmalig angefangen zu meckern) alle gleichnamigen Methoden entfernt. Trotzdem das gleiche Problem.

EDIT: Du hast aber hinter I2Init und I3Init auch noch stdcall stehen. Das funktioniert bei mir nicht.

Geändert von Aviator (16. Jan 2017 um 16:54 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Method Resolution Clause --> Undeclared Identifier

  Alt 16. Jan 2017, 16:54
Dein Code hat hier auch nicht funktioniert. Erst nachdem ich den Stdcall and die Einzelnen funktionen gehängt habe.
Ich denke die Fehlermeldungen vom Compiler sind hier "Suboptimal".
In Wirklichkeit passt nämlich die Signatur nicht
Fritz Westermann
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Method Resolution Clause --> Undeclared Identifier

  Alt 16. Jan 2017, 16:55
Wieso geht stdcall nicht was meckert wer da?
Fritz Westermann
  Mit Zitat antworten Zitat
Aviator

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

AW: Method Resolution Clause --> Undeclared Identifier

  Alt 16. Jan 2017, 17:07
Wieso geht stdcall nicht was meckert wer da?
Kommando zurück mit dem stdcall . Da hat bei mir bei der Interface Deklaration noch etwas gefehlt. Aber der andere Fehler bleibt leider weiterhin.
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:35 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-2025 by Thomas Breitkreuz