inline Funktionen
-
grandpa schrieb:
hm, wenn ich das "inline" aus der xyz.cpp wegnehme, kommt immer noch
[Linker error] undefined reference to `xyz::printId() const'weil du nicht richtig linkst. Wie das geht, steht im Handbuch zu deiner Entwicklungsumgebung/Compiler.
-
rüdiger schrieb:
grandpa schrieb:
hm, wenn ich das "inline" aus der xyz.cpp wegnehme, kommt immer noch
[Linker error] undefined reference to `xyz::printId() const'weil du nicht richtig linkst. Wie das geht, steht im Handbuch zu deiner Entwicklungsumgebung/Compiler.
(Ich nehme Dev-C++)
Wenn ich bei der Datei xyz.cpp aus den Optionen das Häckchen "Ins Linken einbeziehen" rausnehme, kommt noch zusätzlich:
[Linker error] undefined reference to `xyz::xyz()'
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ne, du sollst die Datei ja ins linken einbeziehen. Bist du sicher, dass du in der Code-Datei die Methode so anlegst, wie sie deklariert ist?
ansonsten zeig noch mal Code.
-
ok, mal alle 3 Dateien komplett
// xyz.h class xyz { public: int id; xyz(); void printId() const; };
// xyz.cpp #include <iostream> #include "xyz.h" using namespace std; xyz::xyz(): id(1) {}; inline void xyz::printId() const { cout << "id: " << id << endl; }
// main.cpp #include <iostream> #include "xyz.h" using namespace std; int main() { xyz *test = new xyz(); test->printId(); system("PAUSE"); return EXIT_SUCCESS; };
-
Schau Dir nochmal das Entweder-Oder Beispiel von GPC an. Die Definition der Inline-Methode hat im .cpp File nix verloren.
-
LordJaxom schrieb:
Schau Dir nochmal das Entweder-Oder Beispiel von GPC an. Die Definition der Inline-Methode hat im .cpp File nix verloren.
ich will das 2. Beispiel nehmen:
// xyz.h class xyz { //... void printId() const; }; //Explizit inline, aber außerhalb definiert inline void xyz::printId() const { cout << "id: " << id << endl; }
Also das "inline" vor die implementierte Methode setzen und nicht vor die Deklaration in der Klasse und wieso die inplementierte Methode nicht in die cpp-Datei reinschreiben? Ich implementiere doch keine Methode in einer header-Datei, oder versteh ich ich das noch komplett falsch?
-
grandpa schrieb:
Ich implementiere doch keine Methode in einer header-Datei, oder versteh ich ich das noch komplett falsch?
Im Falle von inline (und templates) schon. Ich hatte dazu mal was geschrieben, guck mal in die FAQ vom C++-Forum, Topic "inline FAQ".
-
grandpa schrieb:
Ich implementiere doch keine Methode in einer header-Datei, oder versteh ich ich das noch komplett falsch?
Bei Templates wirst Du gar nicht drum rum kommen... sonst kannst Du Dein template nicht mehr verwenden
-
thx