Pass-by-reference



  • Hallo Leute,

    ich bin absoluter Neuling und habe ein (wahrscheinlich leichte) Frage. Ich bau gerade verschiedene Klassen auf und habe in meinem C++ Buch "Pass-by-Reference" entdeckt. Leider funktioniert dies bei mir nur mit "leichten" Beispielen mit Standard Datenformaten wie int... aber bei meinen Klassen bin ich gerade etwas ratlos.

    A B::CreateInstance(C &test)
    {
    	A inst = A();
    	inst.meth(test); // hier knallts?!?!? Wie kann ich diesen Wert weitergeben
    	return inst;
    }
    
    void meth(C &test)
    {
    }
    

    Grüße,
    Der Neuling 😉



  • Das geht mit eigenen Typen ganz genauso wie mit int.
    Du musst schon die Fehlermeldung und die Deklaration von A::meth zeigen, ohne kann man nur vermuten, dass du was falsch gemacht hast.



  • Fehlermeldung:

    BUILD: [01:0000000178:ERRORE] Object.obj : error LNK2019: unresolved external symbol "public: void __thiscall A::meth(class C &)" (?meth@A@@QAEXAAVC@@@Z) referenced in function "public: class A __thiscall Object::CreateInstance(class C&)" (?CreateInstance@Object@@QAE?AVA@@AAVC@@@Z)

    Hier die Deklaration der A::meth

    class A : D
    {
    public:
    	A();
    	void meth(C &test);
    };
    


  • Habe den Fehler gefunden 😉

    void A::meth(C &test) // hier muss A:: rein... dummer Fehler ;-)
    {
    }
    

    Leider sind die Fehlermeldungen teilweise wenig hilfreich...



  • Die Fehlermeldung ist durchaus hilfreich. Sie besagt, dass die besagte Funktion nicht definiert worden ist.
    Dadurch weißt du, dass du etwas beim Linken vergessen hast oder du die Funktion gar nicht oder zumindest nicht korrekt (wie hier) definiert hast.



  • Athar schrieb:

    Die Fehlermeldung ist durchaus hilfreich. Sie besagt, dass die besagte Funktion nicht definiert worden ist.

    Och, die Fehlermeldung könnte ja durchaus auch

    Error Linker (#2019): Function 'void A::meth(C&)' not implemented or linked.
    

    lauten. Für Anfänger definitiv leichter und Fortgeschrittene bringt's auch nicht um.



  • Nö könnte sie nicht sein, weil der linker nie was von "void A::meth(C&)" gehört hat. Das Ding heißt für ihn nunmal "void __thiscall A::meth(class C &)", und genau darüber beschwert er sich auch. Er hat, im Gegensatz zu deiner Fehlermeldung sogar noch die Freundlichkeit dir erzählen, warum er "void __thiscall A::meth(class C &)" denn überhaupt kennen muss - und zwar weil es eben in einer bestimmten anderen Funktion verwendet wird, und zwar in "class A __thiscall Object::CreateInstance(class C&)"


Anmelden zum Antworten