Help! : undefined reference to `a::a[in-charge](int)'



  • Hallo!
    Ich versuche eine simple Klasse 🙂 zu 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 function main': : undefined reference toa::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 Fall 😃 Dankeschön!

    Frohe Pfingsten 🙂
    Raphael

    CPP=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
    

Anmelden zum Antworten