Help! : undefined reference to `a::a[in-charge](int)'
-
Hallo!
Ich versuche eine simple Klassezu erstellen, siehe Beispiel:
lasse ich alles in einer Datei kompiliert g++ klaglos, wenn ich
aber in 3 Dateien aufteile, bekomme ich folgende Fehlermeldung:private:[raphael@localhost test]$ g++ main.cpp
/tmp/cclHbR2u.o(.text+0x1a): In functionmain': : undefined reference to
a::a[in-charge](int)'
collect2: ld returned 1 exit status//----File: a.h class a{ int val; public: a(int x); int get(void); }; //----End File a.h //----File: a.cpp //Kommentar entfernen für mehrere Dateien: //#include "a.h" //using namespace std; a::a(int a){ val = a; } int a::get(){ return val; } //----End File a.cpp //----File: main.cpp main(){ a test(5); int b = test.get(); } //----End File main.cpp
Ich bin für jeden Vorschlag offen
Grüße,
Raphael
-
Mit
g++ -o name main.cpp a.cpp
sollte es dann gehen.
Der Linker findet snst nicht dein Konstruktor.
-
Du musst in main.cpp auch noch a.h #includen. Ausserdem heisst es 'int main()' nicht nur 'main'! Letzteres ist afaik kein Standard.
-
godlikebot schrieb:
Du musst in main.cpp auch noch a.h #includen. Ausserdem heisst es 'int main()' nicht nur 'main'! Letzteres ist afaik kein Standard.
Wenn er a.h nicht includiert hätte, wäre es doch kein Linkerfehler, sondern der Compiler hätte gemeckert, dass er die Klasse "a" nicht kennt.
-
Mir ist noch nicht ganz klar, warum ich die alle auf einmal
angeben muss, vor allem, weil ich bisher folgendes makefile verwendet habe,
aber so funktioniert es auf jeden FallDankeschön!
Frohe Pfingsten
RaphaelCPP=g++ OFLAG=-o CFLAGS= -Wall .SUFFIXES : .o .cpp .c .cpp.o : $(CPP) -c $< .c.o : $(CPP) -c $< all: \ Menge \ Simplex \ Main \ Menge: menge.o $(CPP) $(CFLAGS) $(OFLAG) menge menge.o Simplex: simplex.o $(CPP) $(CFLAGS) $(OFLAG) simplex simplex.o Main: main.o $(CPP) $(CFLAGS) $(OFLAG) main main.o menge.o: menge.cpp simplex.o: simplex.cpp main.o: main.cpp
-
meine Dateien heißen eigentlich
simplex, menge und main.cpp
ich wollte euch nur den ganzen restlichen Schrott erspraren.
Seltsam, dass make das nicht hinkriegt...
Egal, jetzt kann ich auf jeden Fall weitermachen
-
Mein Makefiles sehen immer so aus:
C++ = g++ C++FLAGS = ... all: name menu.o: menu.cpp $(C++) $(C++FLAGS) -c menu.cpp name: menu.o $(C++) $(C++FLAGS) menu.o -o name clean: rm *.o