inline -> unresolved external symbol
-
Ahhh, nein, so geht es leider immer noch nciht:
in Header:
class xyz { public: void set_a (bool b_sel); }in der CPP:
inline void xyz::set_a (bool b_sel) { this->_selected_ = b_sel; }Ich bekomme immer noch den Fehler:
unresolved external symbol "public: void __thiscall xyzm::set_a(bool)"
Bei anderen Methoden funzt das mit dem inline einwandfrei, es ist sogar egal ob das "inline" in der Header steht, oder in der CPP bei der Definition, da gibts keine Probleme, nur mit den 3 angegeben.
Ach ja, und wenn ich sie nach Deiner ersten Methode "richtig" inline mache, also direkt in der Header definiere, dann gibts keine Probleme.
Vielen Dank schonmal!
-
Weißt du, was "inline" bedeutet? Der Compiler ersetzt den Funktionsaufruf direkt durch den Inhalt der Funktion. Und das geht natürlich nur, wenn er den Inhalt der Funktion auch kennt.
(oder in Kurzform: Inline-Funktionen MUSST du im Header definieren)
-
class { ... //ohne "inline" keyword } inline void xyz::set_a (bool b_sel) { this->_selected_ = b_sel; } inline void xyz::set_b (std::string &_lab) { this->p_text_displayed = new std::string(_label); } inline void xyz::set_c (std::string &_str) { this->p_pathstring = new std::string(_str_path);alles in *.h
-
Okay, es scheint wirklich so zu sein, dass es ein Muss ist ... naja okay, dann mach ich es so, danke für die Erklärung!
-
Öhm.
Ist das zusätzliche (unnötige) "inline" in der Klasse drinnen verboten? Oder wieso steht da "//ohne "inline" keyword"...?
MSVC meckert nicht und ich schreibe das immer doppelt...
-
Nein, verboten ist es nicht, aber nutzlos

-
Nein, nutzlos ist es nicht, da es dokumentiert dass irgendwo ne inline Implementierung steckt. Gerade wenn man .inl Files verwendet garnicht nutzlos...
-
Der Compiler kann Inline-Funktionen nur auswerten, wenn er die komplette Definition zur Verfügung hat. Von daher wird er eine inline-Deklaration ohne Funktionsrumpf vermutlich ignorieren. Im Ergebnis bringt das inline an dieser Stelle nur etwas für andere Programmierer, die dein Programm lesen.
-
CStoll schrieb:
Der Compiler kann Inline-Funktionen nur auswerten, wenn er die komplette Definition zur Verfügung hat. Von daher wird er eine inline-Deklaration ohne Funktionsrumpf vermutlich ignorieren. Im Ergebnis bringt das inline an dieser Stelle nur etwas für andere Programmierer, die dein Programm lesen.
Genau das meinte ich. Ich hab "dokumentiert" geschrieben. Was ist an "dokumentieren" unklar? Dass ich es nicht für den Compiler "dokumentiere" sondern für Programmierer die den Code lesen sollte klar sein...
-
Was für einen Wissensgewinn soll es denn für einen Fremden haben, daß eine bestimmte Funktion inline sein könnte (ob der Compiler sie wirklich inline setzt, kannst du ohnehin nicht kontrollieren)? Und die Tatsache, daß diese Funktion existiert, sieht man auch ohne das inline Schlüsselwort.
Eidt: Und wenn die Funktion so kurz ist, kannst du sie auch gleich in der Klasse definieren.
-
z.B. den Wissensgewinn dass er die Implementierung im .inl File zu suchen hat und nicht im .cpp File.
Aber man kann alles kleinreden.
Und ja, ich tu' nix lieber als mich ständig zu wiederholen.