Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未定义对“类的typeinfo';以及未定义的对“vtable for class'; 我正在处理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) { }_C++_Undefined Reference_Vtable - Fatal编程技术网

未定义对“类的typeinfo';以及未定义的对“vtable for class'; 我正在处理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) { }

未定义对“类的typeinfo';以及未定义的对“vtable for class'; 我正在处理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) { },c++,undefined-reference,vtable,C++,Undefined Reference,Vtable,不知道它们来自哪里,现在不知道如何“修复”它们。提前感谢;) 您的root::setSize未定义,也未声明为纯虚拟函数。将=0添加到函数末尾(使其成为纯虚拟函数),或定义root::setSize函数 我认为这是因为您没有实施 virtual void setSize(int); 在root中,或者通过添加=0将其声明为纯虚拟的root::setSize未声明为纯虚拟的,这意味着必须对其进行定义。据推测,它应该与其他函数一样纯净: virtual void setSize(int)

不知道它们来自哪里,现在不知道如何“修复”它们。提前感谢;)

您的
root::setSize
未定义,也未声明为纯虚拟函数。将
=0
添加到函数末尾(使其成为纯虚拟函数),或定义
root::setSize
函数

我认为这是因为您没有实施

    virtual void setSize(int);

root
中,或者通过添加
=0将其声明为纯虚拟的

root::setSize
未声明为纯虚拟的,这意味着必须对其进行定义。据推测,它应该与其他函数一样纯净:

virtual void setSize(int) = 0;
                          ^^^

如果您对为什么会出现这个特定错误的详细信息感兴趣:这个编译器需要在某个地方生成类的virtual/RTTI元数据,如果类声明了一个非纯的、非内联的虚拟函数,它将在与该函数定义相同的转换单元中生成它。因为没有定义,所以不会生成它们,从而导致错误。

不要使用裸指针。不要去那里。这是非常糟糕的代码。(同时,查看构造函数初始值设定项列表是如何工作的。)+1用于提供血淋淋的详细信息!
virtual void setSize(int) = 0;
                          ^^^