c – 对类的’typeinfo’的未定义引用和对’class for class’的未定义引用

c – 对类的’typeinfo’的未定义引用和对’class for class’的未定义引用,第1张

概述参见英文答案 > Undefined symbols “vtable for …” and “typeinfo for…”?                                    5个 我正在处理C中的继承.我想编写一个程序来加减两个数组.继承我的代码: #include <iostream>#include <cmath>#include <sstream>using na 参见英文答案 > Undefined symbols “vtable for …” and “typeinfo for…”?5个
我正在处理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’的未定义引用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存