Seite 1 von 1

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

Verfasst: 30. Dezember 2008 10:43
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"?

Verfasst: 30. Dezember 2008 10:52
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

Verfasst: 30. Dezember 2008 11:10
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