Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm will nicht linken.



Giuly
25-11-2005, 06:19
Hallo, mein Programm will sich nicht linken lassen, und ich habe keine Ahnung wieso.

g++ ` pkg-config gtk+-2.0 --cflags` -o strutil.o -c strutil.cpp
g++ ` pkg-config gtk+-2.0 --cflags` -o accounts.o -c accounts.cpp
g++ ` pkg-config gtk+-2.0 --cflags` -o config.o -c config.cpp
g++ ` pkg-config gtk+-2.0 --cflags` -o main.o -c main.cpp
g++ strutil.o accounts.o config.o main.o -o GeePodPP ` pkg-config gtk+-2.0 --libs` `curl-config --libs` -lsqlite3
accounts.o: In function `Account::~Account()':
accounts.cpp:(.gnu.linkonce.t._ZN7AccountD2Ev+0x12 ): undefined reference to `vtable for Account'
accounts.o: In function `Account::Account()':
accounts.cpp:(.gnu.linkonce.t._ZN7AccountC2Ev+0x12 ): undefined reference to `vtable for Account'
accounts.o:(.gnu.linkonce.r._ZTI12IpodsFreepay+0x1 0): undefined reference to `typeinfo for Account'
collect2: ld returned 1 exit status
make: *** [GeePodPP] Error 1
vtable? Was ist das?

Source (http://savannah.nongnu.org/cgi-bin/viewcvs/geefree/geefree/)

MFG

RHBaum
25-11-2005, 13:36
Nur mal so ins blaue geschossen !

verwendest du (oder deine bib die verwendest) dynamic_cast und hasst vergessen RTTI beim compiler einzuschalten ?

was ne VTable iss solltest eigentlich wissen ^^

Ciao ...

Joghurt
25-11-2005, 13:53
Die Meldung taucht entweder auf, wenn man versucht, C++ Programme mit C zu linken, was bei dir ja nicht der Fall ist. Eine andere Möglichkeit war glaube ich, wenn man vergessen hat, virtuelle Methoden auch zu implementieren.

Schau dir die Klasse Account nochmal genau an.

pucki
25-11-2005, 17:50
na ja, du accountest ja da wild in der gegen herum, ;-)


du musst dir dann nur noch im klaren werden, wann du wo was benutzt ;-)))



std::vector<Account*> acclist;

in der accounts.h ....

mal ne allgemeine frage ...
ich dachte, dass man in c++ immer schon dafür sorge tragen muss, dass der constructor und der destructor deklariert werden ...

die sind jedenfalls für die klasse Account.nicht deklariert, für Accounts ja ...

außerdem hast du die klasse Account nicht der klasse Accounts bekannt gemacht ....

na jedenfalls interpretiere ich das ganze so:

er will einen Vector vom Typ Account * anlegen und findet den constructor nicht ...

mmm komisch, aber die klasse scheint er zu kennen ... wirklich komisch .....

gruesse reinhard

locus vivendi
25-11-2005, 20:52
Warum diese Meldung kommt hat Joghurt ja schon gesagt. Zusätzlich ist mir aufgefallen das du Include-Guards verwendets deren Namen mit zwei Unterstrichen + Großbuchstaben beginnen. Das solltest du auch sein lassen. Namen mit mehreren Unterstrichen Hintereinander sind in C++ reserviert, genauso wie solche die mit Unterstrich + Großbuchstaben beginnen.

Joghurt
26-11-2005, 00:15
Du deklariest virtual void Account::update(), implementierst aber GtkWidget* Account::update()

Giuly
26-11-2005, 08:10
Danke für die Antworten. Es geht auch soweit. Ich hab mich jetzt entschlossen zu Gtkmm zu wechseln, da geht vieles "einfach einfacher".

MfG