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?_Vector_iterator@PAVedge@@V?\_Vector\_iterator@PAVedge@@V?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?_Vector_iterator@PAVedge@@V?\_Vector\_iterator@PAVedge@@V?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 ...


Anmelden zum Antworten