"keine passende Funktion für Aufruf von" Fehler in Initialisierungsliste



  • Hallo miteinander,

    nachdem ich jetzt schon einige Foren etc. durchforstet habe, konnte ich bisher keine Lösung zu folgendem Problem finden:

    Ich nutze innerhalb einer Klasse "MyBackendAuthSwitchStateMachine" die Initialisierungsliste wie folgt:

    class MyBackendAuthSwitchStateMachine {
    public:
       MyBackendAuthSwitchStateMachine(/*unwichtige Parameter*/) :
    		   m_TlsMethod(EapPolicyElement(EapType(TLS_METHOD_TYPE))) {}
    private:
       EapPolicyElement m_TlsMethod;
    }
    

    Die anderen relevanten Klassen haben folgende Form:

    class EapType
    {
     public:
      EapType() {}
    
      EapType(ACE_Byte type) {}
    };
    
    class EapContinuedPolicyElement{
    public:
      EapContinuedPolicyElement(EapType t){}
    }
    

    und

    TLS_METHOD_TYPE

    eine bekannte Konstante des Typs ACE_Byte ist. Wenn ich den Compiler drüber laufen lasse, gibt der aus

    keine passende Funktion für Aufruf von »EapContinuedPolicyElement::EapContinuedPolicyElement()«

    Insbesondere ist es daher lustig, da es in einer anderen CPP-Datei mit der identischen Belegung compiliert. Alle notwendigen Header sind eingebunden. 😞

    Danke im Voraus...


  • Mod

    Wenn du einen eigenen Konstruktor definierst, dann wird kein automatischer Defaultkonstruktor mehr erzeugt.
    Ich sehe jetzt zwar nicht die relevante Stelle, aber irgendwo wird der anscheinend gebraucht.

    Abhilfen:
    1. Wichtig: Dich mit Konstruktoren und automatisch erzeugten Membern befassen, damit du überhaupt verstehst was los ist.
    2. Es gibt zwei Möglichkeiten, was hier falsch sein kann:
    - Dein momentanes Design ohne Defaultkonstruktor ist richtig und erwünscht. Der Defaultkonstruktor wird aber an anderer Stelle versehentlich benutzt, z.B. weil du ein Array erzeugst oder weil eine andere Klasse ein EapContinuedPolicyElementMember hat, aber dieses nicht im Konstruktor initialisiert
    - Dein momentanes Design ist falsch und du brauchst doch einen Defaultkonstruktor. Dann musst du einen schreiben.



  • Es sollte eigentlich überall einheitlich "EapPolicyElement" heißen. Das ist mir beim Copy & Paste und dem darauf folgenden Editieren ein wenig durcheinander geraten. 🙄 Dieses Durcheinander der Bezeichner ist also nicht der Grund für den Fehler. 😃


  • Mod

    JimmyBlue schrieb:

    Es sollte eigentlich überall einheitlich "EapPolicyElement" heißen. Das ist mir beim Copy & Paste und dem darauf folgenden Editieren ein wenig durcheinander geraten. 🙄 Dieses Durcheinander der Bezeichner ist also nicht der Grund für den Fehler. 😃

    Dann ist das aber komisch. Versuch mal auf ein minimales Beispiel zu reduzieren und beim C&P nichts zu editieren.

    Denn wenn das so ist wie du sagst, dann rufst du im Konstruktor von MyBackendAuthSwitchStateMachine den passenden Konstruktor von EapPolicyElement/EapContinuedPolicyElement auf. Die Fehlermeldung sagt aber einduetig, dass der Compiler irgendwo einen parameterlosen Konstruktor braucht. Passt denn die Zeile der Fehlermeldung? Hast du vielleicht anderswo kleine Fehler? Z.B. fehlt hier hinter der Klassendefinition von EapContinuedPolicyElement ein Semikolon.



  • Hallo SeppJ,

    erst mal vielen Dank für die Antwort und Respekt für Deine sensationelle Reaktionszeit 🙂 Also den zweiten Deiner Punkte

    SeppJ schrieb:

    - Dein momentanes Design ist falsch und du brauchst doch einen Defaultkonstruktor. Dann musst du einen schreiben.

    hab ich bereits getestet. Habe einen Defaultkonstruktor geschrieben. Compiler meckert weiter.

    Ich habe deshalb leichte Veränderungen am Quellcode gemacht, weil ich das "Dickicht" der Klasse auf den Kern reduzieren wollte. Daher auch der Fehler mit dem Semikolon.
    Da ich mit Eclipse arbeite, würden mir solche Fehler direkt ins Auge springen. Dabei meckert Eclipse auch nicht an den Bezeichnern oder Klassennamen rum.

    Werd jetzt erst mal überprüfen, ob ich den Defaultkonstruktor anderswo versehentlich verwende.


  • Mod

    JimmyBlue schrieb:

    hab ich bereits getestet. Habe einen Defaultkonstruktor geschrieben. Compiler meckert weiter.

    Werd jetzt erst mal überprüfen, ob ich den Defaultkonstruktor anderswo versehentlich verwende.

    Halt! Da stimmt irgendwas nicht. Wenn der Defaultkonstruktor da wäre, dann muss das auch so funktionieren.

    Deiner Beschreibung nach würde ich daher vermuten, dass du dich in deinem "Dickicht" verirrt hast. Es ist jedenfalls nicht gut, wenn der Programmierer selbst solche Begriffe verwendet. Irgendwo machst du Sachen, die nicht das machen, was du denkst.
    Versuche, dein Programmdesign aufzuräumen, dann findest du bestimmt auch den Fehler.



  • Also irgendwie ist mein Compiler nun wirklich übergeschnappt 😡 Wenn ich die Initialisierungsliste auskommentiere, zeigt er immer noch die Fehlermeldung an. Allerdings ändert sich jetzt die Zeilennummer.

    Was hat denn das nun wieder zu bedeuten?!?!?!


  • Mod

    JimmyBlue schrieb:

    Also irgendwie ist mein Compiler nun wirklich übergeschnappt 😡 Wenn ich die Initialisierungsliste auskommentiere, zeigt er immer noch die Fehlermeldung an. Allerdings ändert sich jetzt die Zeilennummer.

    Was hat denn das nun wieder zu bedeuten?!?!?!

    Das wäre normal. Wenn du keinen Konstruktor in der Initialisierungsliste angibst, dann bleibt dem Compiler nichts anderes, als nach dem Defaultkonstruktor zu suchen.


Log in to reply