[Linker error] undefined reference to `Auto::Auto()'
-
CStoll schrieb:
...
Jaja, das ist schon klar. Ich meinte, dass man standardmässig Dinge wie
#include <iostream>in den Header schreibt.
-
Nö!
-
Wieso sollte man? Die Deklaration der Auto-Klasse hat überhaupt keinen Bezug zu IO-Streams, also hat sie es auch nicht nötig, die einzubinden.
(sowas reduziert auch die Abhängigkeiten - wenn du die <iostream> nur in der Implementierung einbindest, kannst du sie später weglassen oder durch <fstream> ersetzen, wenn du die Debug-Ausgaben weglassen willst)
-
Danke schonmal für die Antworten, jetzt kommt allerdings ein neuer aber ähnlicher Fehler:
[Linker error] undefined reference to `Auto::anzahl'
Wahrscheinlich auch simpel zu lösen?!
Lg GrinzPrinz
Schön wärs, der Fehler konnte durch "Speichern" behoben werden...

Allerdings bleibt es leider bei den erstgenannten Fehlern

Lg GrinzPrinz
-
Weißt du denn was diese Fehlermeldung bedeutet? Falls ja, müsstest du die Antwort eigentlich nun schon kennen.

-
GrinzPrinz schrieb:
Danke schonmal für die Antworten, jetzt kommt allerdings ein neuer aber ähnlicher Fehler:
[Linker error] undefined reference to `Auto::anzahl'
Wahrscheinlich auch simpel zu lösen?!
Statische Member müssen irgendwo "leben". Am besten machst du das durch ein
int Auto::anzahl;in deine Auto.cpp
-
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.