链接器错误C++;函数表 我试图在C++中定义一个显式构造函数,但是我会用VTABLE抛出链接错误。p>
这就是我目前所拥有的链接器错误C++;函数表 我试图在C++中定义一个显式构造函数,但是我会用VTABLE抛出链接错误。p>,c++,inheritance,polymorphism,C++,Inheritance,Polymorphism,这就是我目前所拥有的 class Sphere : public Circular{ public: Sphere(double r); string name() const {return "Sphere";} double volume() const; double surface_area() const; }; Sphere:: Sphere(double r): Circular(r){} 这就是错误给我的信息: "vtable for Sp
class Sphere : public Circular{
public:
Sphere(double r);
string name() const {return "Sphere";}
double volume() const;
double surface_area() const;
};
Sphere:: Sphere(double r): Circular(r){}
这就是错误给我的信息:
"vtable for Sphere", referenced from:
Sphere::Sphere(double) in main.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
但如果我这样做:
class Sphere : public Circular{
public:
Sphere(double r):Circular(r){} <--
string name() const {return "Sphere";}
double volume() const;
double surface_area() const;
};
谢谢。问题在于,在
球体
类中,volume()
和surface\u area()
函数仍然未定义。
因此,编译器不会为Sphere类发出任何vtable
如果要保持球体抽象,请将其定义为:
class Sphere : public Circular{
public:
Sphere(double r);
string name() const {return "Sphere";}
virtual double volume() const = 0;
virtual double surface_area() const = 0;
};
Sphere::Sphere(double r): Circular(r){}
否则,请提供这些函数的定义
这背后的原因是
vtable
中的vptr
(虚拟指针)必须指向某个地方 所以,通过使球体函数成为纯虚拟函数,我可以执行一个越界构造函数调用?但是如果我的函数是纯函数,那么继承将如何进行呢?这是否意味着,如果我们调用球面上的体积函数,它指向哪里?基类还是派生类?我只是想确保我完全理解为什么我们可以这样做。
class Sphere : public Circular{
public:
Sphere(double r);
string name() const {return "Sphere";}
virtual double volume() const = 0;
virtual double surface_area() const = 0;
};
Sphere::Sphere(double r): Circular(r){}