Warum compiliert es in der cpp aber nicht im header?



  • Hi,

    Ich hab ein kleines Problem folgendes C++ Verhalten zu verstehen:

    Ich deklariere eine (public )Funktion und weil es ein trivialer Einzeiler ist wollte ich das gleich im header erledigen:

    UStaffMember* CurrentUnit;
    
     float GetUnitSkill() { return BasicSkills->GetSkill(CurrentUnit->GetUnitSkill()); }
    

    Das compiliert aber nicht. Man sagt mir das links von "GetUnitSkill() ein Zeiger zu erwarten waere.. Aber das ist doch der Fall 😕

    Wenn ich diesen Einzeiler in die cpp Datei packe:

    float UStaffMember::GetUnitSkill()
    { 
    	return BasicSkills->GetSkill(CurrentUnit->GetUnitSkill());
    }
    

    dann compiliert es wunderbar.

    Warum geht es schief wenn ich diese Funktion im header implementieren moechte?

    Cheers,
    Klaus



  • Zwei Zeilen Code - ernsthaft?
    Fehlermeldung: Copy&Paste.



  • UStaffMember wird dem Compiler wohl per Vorwärtsdeklaration

    class UStaffMember;
    

    bekannt sein. Bei dem Zeiger ist dies kein Problem, dessen Größe kennt er ja und es reicht, dass er von der Existenz einer solchen Klasse weiß.
    Bei Funktionsaufrufen reicht dies aber nicht. Also kannst du die Klasse vorher definieren (in der gleichen Datei oder die entsprechende Headerdatei vorher inkludieren) oder wenn dies wegen der Abhängigkeiten nicht geht, auf die Linkeroptimierungen vertrauen.


Anmelden zum Antworten