undefinierter Verweis wegen Konstrukoren?
-
den Code habe ich vollständig gepostet und
den Compileraufrufg++ -o bin/Debug/refresh obj/Debug/main.o obj/Debug/src/figur.o -static -lboost_unit_test_framework obj/Debug/main.o: In Funktion »main«: 13: Warnung: undefinierter Verweis auf »Anzeige::print_Wahl()« collect2: error: ld returned 1 exit status Process terminated with status 1 (0 minute(s), 0 second(s)) 2 error(s), 0 warning(s) (0 minute(s), 0 second(s))
-
Dann hast Du das Object-File das
Anzeige::print_Wahl()
enthält nicht mitgelinkt.Spaßeshalber:
#include <iostream> #include <map> #include <functional> #include <cctype> class menu { std::map<char, std::function<void()>> magic; public: void register_function(char key, std::function<void()> function) { magic[key] = function; } void execute(char key) { try { auto func = magic.at(key); func(); } catch(std::out_of_range &e) { std::cerr << "Not found :(\n\n"; } } void do_menu() { char choice; do { std::cin >> choice; execute(choice); } while (std::tolower(choice) != 'q'); } }; void foo() { std::cout << "foo()\n\n"; } void bar() { std::cout << "bar()\n\n"; } void quit() { std::cout << "bye :)\n\n"; } int main() { menu m; m.register_function('f', foo); m.register_function('b', bar); m.register_function('q', quit); m.do_menu(); }
-
@Lou-Cyphr3
Poste doch einfach nochmal sauber deine .h mit entsprechender .cpp und dazu noch deine Quelldatei wo die main() drin liegt. Und zwar so, dass man diese 3 Dateien auch theoretisch kompilieren könnte (bis auf deinen Fehler eben). Generell solltest du wenn du Quelltexte postest alles auf ein minimales kompilierbares Beispiel runterbrechen. An deinem kompletten Quellcode hat hier niemand Interesse. Aber es ist schwer und Blaue zu raten.
-
@Zhavok sagte in undefinierter Verweis wegen Konstrukoren?:
Poste doch einfach nochmal sauber
Ich bewundere Dich. Du glaubst immer noch an das Gute im Menschen.
Aber hey, why not?
Selig sind die, die ihres Nachbarn Ochsen flüssig machen, denn, äh, die sollen ihr Würfelzeug erben. Und äh, gegeben werden soll ihnen, also einem jedem von ihnen, gegeben, jedem von ihnen... soll gegeben werden.
-
@Swordfish sagte in undefinierter Verweis wegen Konstrukoren?:
Dann hast Du das Object-File das
Anzeige::print_Wahl()
enthält nicht mitgelinkt.Spaßeshalber:
```ziemlich cool.
figur.h #ifndef FIGUR_H #define FIGUR_H class Figur { public: int auswahlCpu(); int inputUser(); private: int cpuWahl; int userWahl; ; }; #endif // FIGUR_H figur.cpp #include "figur.h" #include <cstdlib> #include <iostream> using namespace std; int Figur::auswahlCpu(){ return cpuWahl = (rand() % 3); } int Figur::inputUser(){ cin >> userWahl; return userWahl; } Anzeige.h #ifndef ANZEIGE_H #define ANZEIGE_H class Anzeige { public: void text(); void print_Wahl(); }; #endif // ANZEIGE_H Anzeige.cpp #include "Anzeige.h" #include <iostream> using namespace std; // void Anzeige::text(){ cout <<Text<< endl; } void Anzeige::print_Wahl(){ cout << "**wahl**" << endl; }
#include <iostream> #include "Anzeige.h" #include "figur.h" using namespace std; int main() { Anzeige a; a.print_Wahl(); return 0; }
-
ich habe jezt alles so abgetippt ich bekomme den fehler halt nicht hin und möchte echt mal ein wissen wie das geht.
Also was hat der Konst- und Dekonstruktor gemacht ?
-
Ach komm, Du kannst mich schön langsam mal.
Error (active) E0020 identifier "Text" is undefined
-
Bei Anzeige war es by default ein virtual Destruktor. Sie haben sonst lediglich Erstellt und Gelöscht ausgegeben.
-
@Lou-Cyphr3 sagte in undefinierter Verweis wegen Konstrukoren?:
g++ -o bin/Debug/refresh obj/Debug/main.o obj/Debug/src/figur.o -static -lboost_unit_test_framework
Du linkst
Anzeige.o
nicht mit.
-
@Swordfish sagte in undefinierter Verweis wegen Konstrukoren?:
Ach komm, Du kannst mich schön langsam mal.
Error (active) E0020 identifier "Text" is undefined
Das zeigt mir mein Compiler nicht mir an. Warum?
Letztlich ist das aber nicht das Problem.wieso passiert der fehlende Link?
-
@Lou-Cyphr3 sagte in undefinierter Verweis wegen Konstrukoren?:
wieso passiert der fehlende Link?
Du nix linken file wo definiert
Anzeige::print_Wahl()
. Also inAnzeige::text()
Text
ist not defined.
-
@Swordfish sagte in undefinierter Verweis wegen Konstrukoren?:
@Lou-Cyphr3 sagte in undefinierter Verweis wegen Konstrukoren?:
wieso passiert der fehlende Link?
Du nix linken file wo definiert
Anzeige::print_Wahl()
.Ich verstehe gut. Linker jetzt seien aus. Aber die Frage ist warum linkt er nicht.
Ich habe nie über das Terminal gelinkt sondern immer über CodeBlocks. sonst ging es jetzt nicht. sprich, was soll ich tuen damit es linkt.
-
@Lou-Cyphr3
Wenn du Codeblocks verwendest einfach nochmal die .cpp mit Addfiles adden.
klappt bei mir meist.
-
@Abe sagte in undefinierter Verweis wegen Konstrukoren?:
@Lou-Cyphr3
Wenn du Codeblocks verwendest einfach nochmal die .cpp mit Addfiles adden.
klappt bei mir meist..
Danke Mann! Das war es!
Verrückt.