[gelöst] Undefined reference bei Vererbung unerklärlich
-
Hallo zusammen,
ich habe ein Problem mit meinem Sourcecode. Und zwar habe ich eine Klasse die von der Klasse "MapManupilation" erbt. Wenn die Klasse "MapManipulation" wie folgt aussieht erscheint eine Fehlermeldung:
Header:
#ifndef MAPCONTROLLING_H_ #define MAPCONTROLLING_H_ #include "../Gui.hpp" namespace Ugv { namespace Gui { namespace MapControlling { class MapControlling : public Ugv::Gui::Gui { public: MapControlling(); ~MapControlling(); }; }; }; }; #endifSource:
#include "MapControlling.hpp" Ugv::Gui::MapControlling::MapControlling::MapControlling() : Gui() { } Ugv::Gui::MapControlling::MapControlling::~MapControlling() { }Fehlermeldungen:
/home/.../G12_mainwindow.cpp
Fehler:undefined reference to Ugv::Gui::MapControlling::MapControlling::MapControlling()' /home/.../G12_mainwindow.cpp:-1: Fehler:undefined reference toUgv::Gui::MapControlling::MapControlling::~MapControlling()'Wenn ich allerdings die Funktionsdeklaration mit in den Header nehme tritt kein Fehler auf. Also wie folgt:
Header (beachte geschweifte Klammern hinter Funktion):
#ifndef MAPCONTROLLING_H_ #define MAPCONTROLLING_H_ #include "../Gui.hpp" namespace Ugv { namespace Gui { namespace MapControlling { class MapControlling : public Ugv::Gui::Gui { public: MapControlling(){}; ~MapControlling(){}; }; }; }; }; #endifKann mir jemand erklären was da falsch läuft ??
Vielen Dank schonmal.
tuxing
-
Du bindest die Objektdatei mit den Funktionen dazu?
Hinter die } des namespace muss/soll man keine ; schreiben
-
Dir ist klar, dass du dir einen leeren, public Destruktor und Konstruktor auch gänzlich sparen kannst?
edit: Korrektur für Klugscheißer :p
-
SeppJ schrieb:
Dir ist klar, dass du dir einen leeren Destruktor und Konstruktor auch gänzlich sparen kannst?
Wenn sie public sind...
-
theta schrieb:
SeppJ schrieb:
Dir ist klar, dass du dir einen leeren Destruktor und Konstruktor auch gänzlich sparen kannst?
Wenn sie public sind...
Korrigiert.
In C++11 kann man sie übrigens auch private und protected auf default setzen.
-
Hallo,
also die Konstruktoren sind leer, weil das ein Minimalbeispiel sein sollte. Wollte euch da nicht unnötiges Zeug reinschreiben.manni66 hatte das Problem erkannt. Hab ich glatt übersehen
Ich arbeite mit CMakeLists (cmake) und lasse die Header- und Sourcedateien automatisch suchen. Allerdings liegt die Klasse von der ich erbe in der Ordnerstruktur eine Ebene höher, weshalb der Compiler die nicht gefunden hat. Ich hab das ganze in die CMakeLists eingetragen und es funktioniert.Danke für die Hilfe
