[Linker error] undefined reference to `Auto::Auto()'
-
Ich vermute, dass der Linker den Konstruktor der Auto-Klasse nicht findet...weiß nur leider nicht, wie ich "ihm" da weiterhelfen kann...

-
Die Antwort hatte dir drakon doch gleich als erster gegeben - die Methodendefinitionen einer Klasse mußt du mit dem Klassennamen kennzeichnen:
Auto::Auto() { ... }(bei den anderen Methoden genauso)
-
hab ich doch
oder nicht???Auto.cpp
#include "Auto.h" int Auto::anzahl; Auto::Auto() { leistung = 0; fabrikat = ""; anzahl++; cout << "Anzahl vorhandener Autos: " << getAnzahl() << endl; } Auto::Auto(int leistung, char* fabrikat) { leistung = leistung; fabrikat = fabrikat; anzahl++; cout << "Anzahl vorhandener Autos: " << getAnzahl() << endl; } Auto::~Auto() { anzahl--; cout << "Anzahl vorhandener Autos: " << getAnzahl() << endl; } int Auto::getLeistung() { return leistung; } char* Auto::getFabrikat() { return fabrikat; } void Auto::setLeistung(int leistung) { leistung = leistung; } void Auto::setFabrikat(char* fabrikat) { fabrikat = fabrikat; } void Auto::print() { cout << "Fabrikat: " << fabrikat << " Leistung: " << leistung << endl; } int Auto::getAnzahl() { return anzahl; }
-
Jetzt schon, in deinem oberen Beitrag noch nicht

Was für einen Compiler/IDE verwendest du eigentlich? Wenn du per Kommandozeile übersetzt, mußt du dem Compiler mitteilen, daß er beide Quelldateien zusammenfassen soll (eine IDE kümmert sich normalerweise darum).
-
Hab das jetzt in Dev C++ drin...
-
Zeig nochmal die genaue Fehlermeldung mit dem dazughörenden Code.
-
Labor3_3.cpp
#include "Auto.h" int main(int argc, char* argv[]) { Auto a = Auto::Auto(); return 0; }Auto.h
#include <iostream> using namespace std; class Auto { private: int leistung; char* fabrikat; static int anzahl; public: Auto(); Auto(int leistung, char* fabrikat); ~Auto(); int getLeistung(); char* getFabrikat(); void setLeistung(int leistung); void setFabrikat(char* fabrikat); void print(); static int getAnzahl(); };Auto.cpp
#include "Auto.h" int Auto::anzahl; Auto::Auto() { leistung = 0; fabrikat = ""; anzahl++; cout << "Anzahl vorhandener Autos: " << getAnzahl() << endl; } Auto::Auto(int leistung, char* fabrikat) { leistung = leistung; fabrikat = fabrikat; anzahl++; cout << "Anzahl vorhandener Autos: " << getAnzahl() << endl; } Auto::~Auto() { anzahl--; cout << "Anzahl vorhandener Autos: " << getAnzahl() << endl; } int Auto::getLeistung() { return leistung; } char* Auto::getFabrikat() { return fabrikat; } void Auto::setLeistung(int leistung) { leistung = leistung; } void Auto::setFabrikat(char* fabrikat) { fabrikat = fabrikat; } void Auto::print() { cout << "Fabrikat: " << fabrikat << " Leistung: " << leistung << endl; } int Auto::getAnzahl() { return anzahl; }Und die Fehler:
[Linker error] undefined reference toAuto::Auto()' [Linker error] undefined reference toAuto::~Auto()'
-
Bereinige mal das Projekt und erstell alles neu. Das sollte so eigentlich gehen.
Abgesehen davon solltest du dir mal Headerguards anschauen und using namespace im Header zu haben ist keine gute Idee.
-
Auch das Projekt bereinigen nütze leider nichts

Ob das nun alles guter programmierstil is, sei mal dahin gestellt...im mom zählt für mich nur, dass es läuft...

Lg GrinzPrinz
-
Das sieht mir sehr danach aus, als würdest du die aus Auto.cpp erzeugte Objektdatei nicht dazu linken. Wie man das in DevC++ macht: Keine Ahnung.
-
SeppJ schrieb:
Das sieht mir sehr danach aus, als würdest du die aus Auto.cpp erzeugte Objektdatei nicht dazu linken. Wie man das in DevC++ macht: Keine Ahnung.
Hehe. Soweit (resp. so kurz) habe ich gar nicht mal mehr gedacht. ^^
@GrinzPrinz
Unter Windows würde ich dir Visual Studio 2010 Express empfehlen (als Student kannst du auch die Vollversion gratis beziehen). Da musst du dich um so Sachen, wie Linking auch nicht mehr kümmern.Ansonsten musst du wahrscheinlich ein Makefile anpassen (oder etwas DevC++ spezifisches).
-
Jo, in VS2010 hab ich den ersten Versuch gemacht...auch da bekomme ich vermutlich die gleiche Fehlermeldung:
Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall Auto::~Auto(void)" (??1Auto@@QAE@XZ)" in Funktion "_wmain". H:\FH\6.Sem\C++\Labor\Labor 3\Labor3_3\Labor3_3\Labor3_3.obj Labor3_3
Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall Auto::Auto(void)" (??0Auto@@QAE@XZ)" in Funktion "_wmain". H:\FH\6.Sem\C++\Labor\Labor 3\Labor3_3\Labor3_3\Labor3_3.obj Labor3_3
Die Codefiles sind exakt dieselben, wie oben gepostet...
-
In deiner Headerdatei hast du keine Codeguards.
Ich gehe davon aus das du die Projektherstellung im DEV falsch bedienst

Headerdateien in selbsterstellten Headern nur includieren, wenn die da benötigt werden.
Also:#include <iostream> using namespace std;ist bei dir in der falschen Datei gelandet.
Hau in die Tasten
f.-th.
-
Ich tippe mal hier so eine Kurzanleitung für eine Projekterstellung.
Alle deine Quelldateien sind in einem Verzeichnis?
IDE starten - im Menu "new projekt" oder ähnliches suchen und drauf die Maus -
dann sollte ein Feld mit mehreren Icons aufgehen - da in deinem Fall "Console Applikation" oder so - eventuell werden noch Pfade/Path/Verzeichnisse abgefragt, die du richtig beantworten solltest - bei einigen IDE ist eine main.cpp vergegeben -> löschen und dann deine .cpp Dateinen mit Pfad richtig eintragen.Das nur allgemein.
Und wie schon zuvor geschrieben:
Header in der besseren Datei includieren und dann sollte dein Quelltext laufen.Wenn nicht, hast du dein Projekt nicht korrekt erstellt.
MfG f.-th.
-
So, ich nochmal
Hab einen kleinen Spaziergang eingelegt, konnte etwas Abstand von dem Sch*** gewinnen und siehe da, ich hab die Lösung gefunden 
Man darf in VS2010 eben nicht einfach "Datei"->"Neu" machen, sondern Rechtsklick aufs Projekt und "Hinzufügen"->"Klasse" und schwups läuft alles...Arrrrgggg...

Trotzdem Danke an alle für die Hinweise und Antworten

Liebe Grüße, der nun glückliche GrinzPrinz

-
EOutOfResources schrieb:
Inkludierungen kommen in den Header. Das Sourcefile inkludiert nichts ausser dem Header.
Was ein Käse. Schonmal was von Compilezeit-Abhängigkeiten gehört? Die Ideale #include-Verteilung ist die, wo der Header mit einer Handvoll Forward-Declarations auskommt und nur die Source alles includiert, was zur Implementierng nötig ist.
Siehe auch hier:
http://www.gotw.ca/gotw/007.htm