0
C++에서 명시 적 생성자를 정의하려하지만 vtable에서 링커 오류가 발생했습니다. 링커 오류 C++ vtable
이
내가 무엇을 가지고 지금까지이 오류가 나에게주는 것입니다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;
};
을 다음 그것은 어떤 오류를 던지지 않습니다. 다음은 참조를 위해 내 원형 클래스와 GeometricSolid 클래스 :
class GeometricSolid{
public:
virtual string name() const = 0;
virtual double volume() const = 0;
virtual double surface_area() const = 0;
virtual ~GeometricSolid(){};
};
class Circular : public GeometricSolid{
protected:
double radius;
public:
virtual string name() const = 0;
virtual double volume() const = 0;
virtual double surface_area() const =0;
Circular(double r);
};
감사합니다.
그래서 Sphere 함수를 순수 가상 함수로 만들어서 라인 생성자 호출을 수행 할 수 있습니까? 그러나 내 기능이 순수하다면 상속은 어떻게 될 것인가? wouldnt 그것은 주에서 볼륨 함수를 sphere로 부르면 어디에서 가리킬 것입니까? 기본 클래스 또는 파생 클래스? 나는 왜 우리가 이것을 할 수 있는지를 완전히 이해하고 있는지 확인하고 있습니다. –