Aus Langeweile und weil ich üben wollte habe ich heute versucht
wrapperklassen zuschreiben für die fundamentalen Datentypen in C++.
Dazu habe ich mir erstmal eine Abstrakte generische Basisklasse
geschrieben. Diese Klasse beinhaltet also alle operatoren die man so
braucht sowie 2 variabeln die in einem konstruktor dieser Klasse schon
initialisert wird. Bisdahin gibt es keine Probleme Seitens meines
Compilers(g++,unter linux).
Wenn ich jetzt aber versuche meine Basisklasse abzuleiten z.b für die
Klasse Int und versuche diese dann Klasse zu Instanzieren meckert mein
Compilern mit folgender Meldung:
build/Debug/GNU-Linux-x86/newmain.o: In function `~Int':
/home/Hannes/NetBeansProjects/InfoNet/include/Datatypes/Int.h:215: undefined reference to `vtable for InfoNet::Datatypes::Int'
build/Debug/GNU-Linux-x86/newmain.o: In function `Int':
/home/Hannes/NetBeansProjects/InfoNet/include/Datatypes/Int.h:199: undefined reference to `vtable for InfoNet::Datatypes::Int'
Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht und der Fehler ist
banal aber ich komme einfach nicht drauf ich hoffe jemand hat eine idee.
hier noch zusätzlich die Passenden code ausschnitte:
Basisklasse:
template<typename T>
class Object
{
public:
typedef T value_type;
typedef T* pointer;
typedef T& reference;
typedef const T* const_pointer;
typedef const T& const_reference;
typedef Object<T> Self;
typedef Object<T>* SelfPointer;
typedef Object<T>& SelfReference;
private:
T DataMember;
std::string ObjectName;
protected:
public:
Object(std::string name):DataMember(0),ObjectName(name)
{
};
Object(std::string name,value_type var):DataMember(var),ObjectName(name)
{
};
Object(SelfReference var)
{
this->DataMember = var.DataMember;
this->ObjectName = var.ObjectName;
};
virtual ~Object()
{
};
};
Abgeleitete Klasse:
class Int : public Object<int>
{
private:
protected:
public:
Int():Object<int>("Int")
{
}
Int(int var):Object<int>("Int",var)
{
}
Int(Int& var):Object<int>(var)
{
}
virtual ~Int()
{
}
};
Johannes Lᅵke <pro...@gmx.de> writes:
> build/Debug/GNU-Linux-x86/newmain.o: In function `~Int':
> /home/Hannes/NetBeansProjects/InfoNet/include/Datatypes/Int.h:215: undefined reference to `vtable for InfoNet::Datatypes::Int'
In deinem Code kommt gar kein namespace "InfoNet" vor. Also passt das
wohl nicht ganz zusammen. Auf die schnelle sehe ich jetzt auch nicht
direkt einen Fehler. Syntaktisch schein alles zu passen.
Vielleicht hast du beim Linken auch nicht alle Objekte angegeben.
Siehe eventell folgende Seite: http://gcc.gnu.org/faq.html#vtables
Viele Grᅵᅵe
Sebastian Waschik
Diese Fehlermeldung l�sst sich anhand des gezeigten Codes nicht nach-
vollziehen. Meine Glaskugel meint, deine namespace-Deklarationen seien
inkonsistent.
--
Br�der, in die Tonne die Freiheit,
Br�der, ein Stoppschild davor.
Egal was die Schwarzen Verlangen
Rufen wir: Ja! Brav im Chor.
Mit dem Namespace ist alles ok; ich hab jetzt bei den Code Beispielen nur
einfache die Klassen genommen und dann nur die Wichtigsten "Funktionen"
übrig gelassen sonst wäre der Code einfach nur unbüersichtlich geworden
> Hallo,
> Viele Grüße
> Sebastian Waschik
Mit dem Namespace hat das meiner Meinung nicht viel zu tun. Im Code den
ich hier veröffentlicht habe habe ich die namespaces weggelassen sowie
einige Funktionen der Klasse damit das alles noch lesbar und
übersichtlich bleib.
Diese Versicherung alleine ist wenig hilfreich fuer die Mitglieder
dieser
Gruppe. Wenn du dir wirklich Hilfe erhoffst, dann beherzige bitte das
folgende:
1) Grenze deinen Fehlerfall so ein, dass du ein /komplettes/
Kurzprogramm
posten kannst, was auf deinem Compiler den besagten Fehler provoziert.
2) Markiere dort die Zeile(n), die der Compiler anmeckert und gib uns
die Compiler-
"Meckerei" so genau wie möglich (modulo spezifischer
Systemeigenheiten)
wieder.
Anderenfalls gibt es kaum Grund zur Annahme, dass dir von hier aus
jemand helfen kann und frustriert zudem die Gruppenmitglieder.
Besten Gruss aus Bremen,
Daniel Krügler