Class 链接器生成未定义的引用派生模板类实例-代码更新和修复
我有以下抽象类-Class 链接器生成未定义的引用派生模板类实例-代码更新和修复,class,templates,interface,virtual,linker-errors,Class,Templates,Interface,Virtual,Linker Errors,我有以下抽象类- #ifndef FOO_H #define FOO_H template <typename T> class FOO{ public: virtual void bar(); protected: T foobar; }; #endif \ifndef FOO\H #定义FOO_H 模板 福班{ 公众: 虚空条(); 受保护的: T foobar; }; #恩迪夫 然后我从这个类派生- #ifndef BAH_H #define BA
#ifndef FOO_H
#define FOO_H
template <typename T>
class FOO{
public:
virtual void bar();
protected:
T foobar;
};
#endif
\ifndef FOO\H
#定义FOO_H
模板
福班{
公众:
虚空条();
受保护的:
T foobar;
};
#恩迪夫
然后我从这个类派生-
#ifndef BAH_H
#define BAH_H
#include "foo.h"
template <typename T>
class BAH : public FOO<T>{
public:
BAH(){};
void bar(T const &);
};
#endif
////////////////////////////////////////////////
//Class Methods
////////////////////////////////////////////////
template<class T>
void BAH<T>::bar(T const &)
{
}
#如果没有
#定义BAH_H
#包括“foo.h”
模板
BAH类:公共食品{
公众:
巴哈(){};
空杆(T常数&);
};
#恩迪夫
////////////////////////////////////////////////
//类方法
////////////////////////////////////////////////
模板
无效BAH::bar(T常数&)
{
}
然后,我创建main
#include "bah.h"
int main(int argc, char **argv)
{
FOO<int> *i_bah = new BAH<int>();
}
#包括“bah.h”
int main(int argc,字符**argv)
{
FOO*i_bah=新的bah();
}
在编译%g++main.cpp-I时/
我现在明白了-
/tmp/ccglncVU.o:(.rodata._ZTV3BAHIiE[vtable for BAH]+0x10):未定义对FOO::bar()的引用
/tmp/ccglncVU.o:(.rodata._ZTV3FOOIiE[vtable for FOO]+0x10):未定义对
FOO::bar()的引用
collect2:ld返回了1个退出状态您期望什么?您尚未实现
foo::bar
方法。请注意,派生类中的方法具有不同的签名aaahh。。。谢谢,谢谢。。。。。我的眼睛太累了…我完全错过了…叹气。。。