我正在处理C中的继承.我想编写一个程序来加减两个数组.继承我的代码:
#include <iostream>#include <cmath>#include <sstream>using namespace std;class root{ protected : int size; double *array; public : virtual ~root() {} virtual root* add(const root&) = 0; virtual root* sub(const root&) = 0; virtual istream& in(istream&,root&) = 0; virtual int getSize() const = 0; virtual voID setSize(int); virtual int getAt(int) const = 0;};class aa: public root{ public : aa(); aa(int); aa(const aa&); root* add(const root& a); root* sub(const root& a); istream& in(istream&,root&){} int getSize() const; voID setSize(int); int getAt(int) const;};class bb: public root{public: bb() { } bb(const bb& b) { } root* add(const root& a); root* sub(const root& a); istream& in(istream&,root&){} int getSize() const{} voID setSize(int){} int getAt(int) const{}};aa::aa(){ size = 0; array = NulL;}aa::aa(int nsize){ size = nsize; array = new double[size+1]; for(int i=0; i<size; i++) array[i] = 0;}root* aa::add(const root& a){ for (int i=0; i<a.getSize(); i++) array[i] += a.getAt(i); return new aa();}root* aa::sub(const root& a){}int aa::getSize() const{ return size;}voID aa::setSize(int nsize){ size = nsize; array = new double[size+1]; for(int i=0; i<size; i++) array[i] = 0;}int aa::getAt(int index) const{ return array[index];}root* bb::add(const root& a){ return new bb();}root* bb::sub(const root& a){}int main(int argc,char **argv){}
但我有一个奇怪的错误:
/home/brian/Desktop/Temp/UnTitled2.o||In function `root::~root()':|UnTitled2.cpp:(.text._ZN4rootD2Ev[_ZN4rootD5Ev]+0xb)||undefined reference to `vtable for root'|/home/brian/Desktop/Temp/UnTitled2.o||In function `root::root()':|UnTitled2.cpp:(.text._ZN4rootC2Ev[_ZN4rootC5Ev]+0x8)||undefined reference to `vtable for root'|/home/brian/Desktop/Temp/UnTitled2.o:(.rodata._ZTI2bb[typeinfo for bb]+0x8)||undefined reference to `typeinfo for root'|/home/brian/Desktop/Temp/UnTitled2.o:(.rodata._ZTI2aa[typeinfo for aa]+0x8)||undefined reference to `typeinfo for root'|||=== Build finished: 4 errors,0 warnings ===|
不知道他们来自哪里,现在不知道如何’修复’他们.提前致谢;)
解决方法 root :: setSize未声明为纯虚拟,这意味着必须定义它.据推测,它应该像其他功能一样纯净:virtual voID setSize(int) = 0; ^^^
如果你对为什么会得到那个特定错误的血腥细节感兴趣:这个编译器需要在某处生成类的虚拟/ RTTI元数据,如果类声明了一个非纯的非内联虚函数,它将生成它在与该函数定义相同的翻译单元中.由于没有定义,因此不会生成它们,从而产生该错误.
总结以上是内存溢出为你收集整理的c – 对类的’typeinfo’的未定义引用和对’class for class’的未定义引用全部内容,希望文章能够帮你解决c – 对类的’typeinfo’的未定义引用和对’class for class’的未定义引用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)