Linker Fehler bei überladenem Konstruktor
-
Hallo Leute,
Ich habe eine Klasse geschrieben, die einige systemcalls wrappt.
Diese Klasse ist von einer anderen Klasse abgeleitet. Die Klasse hat einen default Konstruktor der private ist und einen überladenen Konstruktor der einen bool als Parameter bekommt.
Wenn ich nun in einem Testfile ein Objekt der abgeleiteten Klasse anlege und dem Konstruktor "true" als Parameter übergebe bekomme ich einen Linker Fehler für den Konstruktor (undefined reference to Klasse::Klasse[in-charge](bool)) UND einen Linker Fehler für den Destruktor (undefined reference to Klasse::~Klasse[in-charge]()).
Wenn ich im Testfile den default Konstruktor aufrufe bekomme ich diese Fehler nicht.
Hat irgendjemand eine Idee woran das liegen könnte???
Mfg Meaculpa
-
wo hast du denn den konstruktor implementiert?
er sucht seinen "körper".
-
Dass er den Destruktor auch nicht findet macht mich stutzig. Daher ein gewagter Schuss ins Blaue: Du hast deine Instanz folgendermaßen angelegt:
MyClass myclass();
Weg mit den Klammern, das deklariert eine Funktion, keine Variable. Es würde allerdings das mit dem Destruktor erklären, denn wo kein Objekt erzeugt wird muss auch keins zerstört werden.
Das löst allerdings nicht dein Problem. Wenn du die Konstruktoren und den Destruktor tatsächlich implementiert hast, hast du wohl vergessen, sie zu linken. Wie das geht ist compilerspezifisch, ich vermute aber bei dir den gcc ...:
$ g++ -c main.c $ g++ -c myclass.c $ g++ myclass.o main.o
-
Hi Leute,
war ein so Saublöder Fehler, dass ich mich eigentlich morgen sofort exmatrikulieren müsste.
Habe einen Fehler im Makefile gemacht...
$(TARGET): $(OBJECTS) $(CXX) $(LDFLAGS) $< $@ # habe also jedes .o einzeln dazu gelinkt #richtig war aber: $(TARGET): $(OBJECTS) $(CXX) $(LDFLAGS) $(OBJECTS) $@
Nichts ist so wie es scheint
Danke für die (versuchte) Hilfe
Mea