Linkerfehler bei Funktionsaufruf mit Referenz



  • Hallo,

    ich erhalte folgenden Linkerfehler:

    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl einlesen(struct Vector<struct Point>,struct String)" (?einlesen@@YAXU?$Vector@UPoint@@@@UString@@@Z)" in Funktion "_main".
    1>c:\Users\Tim\Documents\Visual Studio 2010\Projects\Kapitel10-A1-7\Debug\Kapitel10-A1-7.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    

    und hab absolut keine Ahnung warum 😕

    In main() erstelle ich einen Vector von Punkten (eine einfache Struktur mit x- und y-Werten) und rufe die Funktion "einlesen" auf:

    vector<Point> processed_points;
    einlesen(processed_points, "myData.txt");
    

    Hier meine Funktion "einlesen":

    void einlesen(vector <Point>& v, String name)
    {
    	Point p;
    	ifstream ifstr(name.c_str());
    	while(ifstr >> p)
    	{
    		v.push_back(p);
    	}
    
    }
    

    Hier benutze ich

    vector <Point>& v
    

    statt

    vector <Point> v
    

    da ich die aus der Datei "myData.txt" gelesenen Punkte direkt in den der Funktion "einlesen" übergebenen Vector "processed_points" schreiben möchte.

    Benutze ich keine Referenz als Parameter der Funktion "einlesen" funktioniert der Code einwandfrei, natürlich wird aber der übergebene Vector dann nicht verändert.
    Ich bin mir bewusst dass ich die "einlesen" Funktion umschreiben könnte sodass sie den Vector zurückgibt und ich diesen dann in "main" speichere, es handelt sich bei der Aufgabe jedoch um eine Aufgabe aus dem Buch "Einführung in die Programmierung in C++", und ich wollte noch ein wenig mit Referenzen üben 🙂

    Ich wäre euch sehr dankbar wenn ihr mir aufzeigen könntet wo der Fehler liegt, ich erkenne absolut keinen. M.M.n. mache ich es genau wie in diesem Beispiel aus dem Buch:

    void init(vector <double>& v)
    {
    	for(int i=0; i<v.size();++i)
    	{
    		v[i]=i;
    	}
    }
    
    int main()
    {
    	vector<double> vd1(10);
    	init(vd1);
    }
    

    Dieser Code funktioniert und schreibt in den von main übergebenen Vector vd1 die Zahlen 0-9.

    Vielen Dank schonmal für Eure Hilfe 🙂


  • Mod

    Du hast vermutlich irgendwo eine Deklaration:

    void einlesen(vector <Point>, String)
    

    Die passt nicht zu dem, wie deine Definition der Funktion aussieht. Der Linker hält daher den Aufruf der Funktion und die eigentliche Funktion für zwei unterschiedliche Funktionen. Guck mal durch deine Header.



  • Oh mann, das wars 🙂
    Vielen Dank, das habe ich tatsächlich bei der Fehlersuche überlesen.
    Thema kann geschlossen werden 🙂


Anmelden zum Antworten