LINUX.ORG.RU

C++ Изучаю наследование классов.

 , ,


0

2

Доброго времени суток!

Вот код базового класса и класса наследника:

daemon.hpp:

class TDaemon{
	protected:
		static char ConfigFileName[128];
	public:
		TDaemon(const char* ConfigName);
		~TDaemon(){ };
                virtual void DaemonFunction(unsigned int, void*);
};
usb_daemon.hpp:

class TUSB_Daemon : public TDaemon{
	private:
		
	public:
		void DaemonFunction(unsigned int, void*);
		TUSB_Daemon(const char* ConfigName) : TDaemon(ConfigName){};
};

Конструктор TDaemon определен в файле daemon.cpp.

Почему линкер выдает такую ошибку?

usb_daemon.o:(.rodata._ZTI11TUSB_Daemon[_ZTI11TUSB_Daemon]+0x10): undefined reference to `typeinfo for TDaemon'
daemon.o: In function `TDaemon::TDaemon(char const*)':
/home/igor/templates/daemon/src/daemon.cpp:235: undefined reference to `vtable for TDaemon'
main.o: In function `TDaemon::~TDaemon()':
/home/igor/templates/daemon/src/daemon.hpp:35: undefined reference to `vtable for TDaemon'
collect2: error: ld returned 1 exit status

Все ж вроде корректно объявлено?

★★

~TDaemon(){ };

А тут тебя точно ничего не смущает? Безотносительно к ошибке.

А в твоём коде ты в usb_daemon.hpp daemon.hpp заинклюдил? Короче, весь код показывай.

fluorite ★★★★★
()
Последнее исправление: fluorite (всего исправлений: 1)
Ответ на: комментарий от mix_mix

О! прокатило. Странно, что линкер ругался не на виртуальную функцию, а на конструктор и деструктор класса.

aido ★★
() автор топика
Ответ на: комментарий от aido

Он на vtable ругается, а vtable создается в той единиице трансляции, где объявлена первая (по порядку в классе) виртуальная функция

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.