[gelöst]Klassiker: undefined reference to `vtable

Alles rund um die Programmierung mit Qt
Antworten
McMurphy
Beiträge: 4
Registriert: 29. Dezember 2008 16:42

[gelöst]Klassiker: undefined reference to `vtable

Beitrag von McMurphy »

gleich vorweg (wie auch der titel vermuten lässt): die forums-suche benutzt; soweit ich dazu fähig war, die entsprechenden hinweise ausgewertet und umgesetzt, leider kein positives ergebnis :(

mein problem:

IMyInterface.h

Code: Alles auswählen

#ifndef IMYINTERFACE_H_
#define IMYINTERFACE_H_

#include <string>

class IMyInterface {

	public:
		virtual std::string saySomething();

};

#endif /* IMYINTERFACE_H_ */
MyImplementor.h

Code: Alles auswählen

#ifndef MYIMPLEMENTOR_H_
#define MYIMPLEMENTOR_H_

#include <string>
#include "IMyInterface.h"

class MyImplementor : public IMyInterface {

	public:
		MyImplementor();
		virtual ~MyImplementor();

		std::string saySomething();

};

#endif /* MYIMPLEMENTOR_H_ */
MyImplementor.cpp

Code: Alles auswählen

#include <string>
#include "MyImplementor.h"

MyImplementor::MyImplementor() {
	// TODO Auto-generated constructor stub

}

MyImplementor::~MyImplementor() {
	// TODO Auto-generated destructor stub
}

std::string MyImplementor::saySomething() {
	return std::string("Ola");
}
dieser code läuft einwandfrei in einem "normalen" c++-projekt (Eclipse -> C++ -> Hello World), als qt nicht...

nach entfernen der beziehung

Code: Alles auswählen

class MyImplementor : public IMyInterface
funktioniert es.

wahrscheinlich hängt die antwort an meinem brett vor'm kopf, dummerweise nur an der falschen seite und ich seh' sie nicht. könnte sie mir jemand "vorlesen"?
Zuletzt geändert von McMurphy am 30. Dezember 2008 11:08, insgesamt 1-mal geändert.
[ja|nein|vielleicht]*
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Das Brett vorm Kopf wird sein, dass du nichts in "IMyInterface" implementierst. Das solltest du, wenn du die Methoden nicht "pure virtual " definierst ;)
Auch ein virtueller Destruktor in der Interface-Klasse kommt gut.

Also Interface-Definition so abändern:

Code: Alles auswählen

class IMyInterface {

   public:
      virtual ~IMyInterface() {}
      virtual std::string saySomething() =0;

};
Hoffe jetzt klappt es ;)

Grüße
Franz
McMurphy
Beiträge: 4
Registriert: 29. Dezember 2008 16:42

Beitrag von McMurphy »

Brett vor'm Kopf billig abzugeben...

argh... interessant dass es in dem "normalen" c++-projekt funktioniert, aber naja, wenn man's weiß ;)

danke
[ja|nein|vielleicht]*
Antworten