Aly*_*Aly 3 c++ inheritance abstract-class unique-ptr
我有以下代码:
class Base{
public:
virtual void do_something(int a) = 0;
virtual ~Base();
};
template<typename T>
class Concrete : public Base{
T _t;
public:
Concrete(){};
virtual void do_something(int a);
virtual ~Concrete();
};
template<typename T>
void Concrete<T>::do_something(int a){
std::cout << a << std::endl;
}
template<typename T>
Concrete<T>::~Concrete(){}
int main(int argc, char **argv) {
std::unique_ptr<Base> b(new Concrete<int>());
b->do_something(5);
}
Run Code Online (Sandbox Code Playgroud)
但是,链接退出时出错.输出是:
Undefined symbols for architecture x86_64:
"Base::~Base()", referenced from:
Concrete<int>::~Concrete() in testbed_evaluator.o
Concrete<int>::~Concrete() in testbed_evaluator.o
"typeinfo for Base", referenced from:
typeinfo for Concrete<int> in testbed_evaluator.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚我做错了什么
你向编译器承诺了一个析构函数Base,所以它调用了它.但是你从来没有写过一个,所以当链接器看到那些调用它不知道该怎么做.
您可以像更改一样轻松地修复它
virtual ~Base();
Run Code Online (Sandbox Code Playgroud)
至
virtual ~Base() {}
Run Code Online (Sandbox Code Playgroud)
后者有一个身体; 这是一个真正的定义.