Linker-Fehler, den ich nicht verstehe
-
Hallo,
ich habe ein Problem mit einer Fehlermeldung, die ich weder verstehe noch wegbekomme. Vielleicht weiß ja von euch jemand einen Rat. Folgender Code liegt vor:
Datei "node.h"
. . . #include <iostream> #include <vector> #include <string> using namespace std; class edge; class node { public: . . . typedef std::vector<edge *>::iterator edge_iterator; void aushaengen(edge *e); edge_iterator edge_begin(); edge_iterator edge_end(); };Die Datei "node.cpp"
#include <iostream> #include "edge.h" #include "node.h" #include <iterator> using namespace std; . . . void node::aushaengen(edge *e) { edge_iterator eit; //Problem for (eit = e_begin (); eit != e_end (); ++eit) if (*eit == e) break; if (eit == e_end ()) return; edges.erase (eit); }Ich habe einige unwichtige Bestandteile weggelassen. Das Problem liegt am e_iterator eit in der node.cpp-Datei. Ich habe die entsprechende Stelle mit "//Problem" gekennzeichnet. Sobald ich diesen Problemteil auskommentiere compiliert mein Programm. Aber wenn die for-Schleife und das, was folgt, drin ist, dann kommt folgende Fehlermeldung:
node.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: class std::_Vector_iterator<class edge *,class std::allocator<class edge *> > __thiscall node::e_end(void)" (?e_end@node@@QAE?AV?allocator@PAVedge@@@std@@@std@@XZ)" in Funktion ""public: void __thiscall node::aushaengen(class edge *)" (?unhook@node@@QAEXPAVedge@@@Z)".
node.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: class std::_Vector_iterator<class edge *,class std::allocator<class edge *> > __thiscall node::e_begin(void)" (?e_begin@node@@QAE?AV?allocator@PAVedge@@@std@@@std@@XZ)" in Funktion ""public: void __thiscall node::aushaengen(class edge *)" (?unhook@node@@QAEXPAVedge@@@Z)".Was bedeutet diese Fehlermeldung und wie kann ich den Fehler beseitigen?

Ich glaube, ich hab da irgendwas mit den Klassen falsch gemacht. Aber ich sehe nicht was da falsch sein könnte. Ich benutze übrigens Visual Studio 2008.
Danke für eure Hilfe
-
#ifndef _KLASSENNAME_ #define _KLASSENNAME_ //hier Klasse einfügen #endif _KLASSENNAME_
-
Omicron schrieb:
#ifndef _KLASSENNAME_ #define _KLASSENNAME_ //hier Klasse einfügen #endif _KLASSENNAME_Das hab ich in der Datei node.h schon drinstehen, aber hier halt nicht aufgeführt. Daran kanns also nicht liegen.
-
Wo sind aushaengen edge_begin edge_end definiert? Oder hast du nur das node:: vergessen?
-
Danke an alle, die mir geholfen haben. Ich bin ein Blödmann....hab nur was auskommentiert gehabt weiter unten und hab das nicht gesehen. Thread löschen bitte

Edit: zu meiner Verteigigung...ich bin farbenblind und sehe die grün auskommentierten Zeilen nicht. Und so ein /* und */ kann man schon mal übersehen.

-
Euler schrieb:
Danke an alle, die mir geholfen haben. Ich bin ein Blödmann....hab nur was auskommentiert gehabt weiter unten und hab das nicht gesehen. Thread löschen bitte

Edit: zu meiner Verteigigung...ich bin farbenblind und sehe die grün auskommentierten Zeilen nicht. Und so ein /* und */ kann man schon mal übersehen.

Kein Problem!

-
Euler schrieb:
Edit: zu meiner Verteigigung...ich bin farbenblind und sehe die grün auskommentierten Zeilen nicht. Und so ein /* und */ kann man schon mal übersehen.

Bei den meisten IDEs kann man das Farbschema ändern. Wäre ggf. in Deinem Fall sinnvoll. Häufig gibt es sogar vordefinierte Schemata für Leute mit irgendwelchen Sehschwächen.
-
Und noch ein Hinweis:
Niemals "using namespace std;" im Header verwenden!!!
-
Euler schrieb:
Danke an alle, die mir geholfen haben. Ich bin ein Blödmann....hab nur was auskommentiert gehabt weiter unten und hab das nicht gesehen. Thread löschen bitte

Edit: zu meiner Verteigigung...ich bin farbenblind und sehe die grün auskommentierten Zeilen nicht. Und so ein /* und */ kann man schon mal übersehen.

Was war denn nun genau das Problem, bzw. wie hast du es gelöst? Ich hab ziemlich genau das gleiche Problem (beim Durchiterieren findet er das Iterator-Symbol nicht).
Irgendwie vermute ich ja, dass die Fehlermeldung nur ein Nebeneffekt eines ganz anderen Problems ist ...