我今天遇到了相当奇怪的情况.在Interface构造函数中直接调用纯虚方法时,我得到一个未定义的引用错误.
class Interface
{
public:
virtual void fun() const = 0;
Interface(){ fun(); }
};
class A : public Interface
{
public:
void fun() const override {};
};
int main()
{
A a;
}
Run Code Online (Sandbox Code Playgroud)
结果是:
prog.cc: In constructor 'Interface::Interface()':
prog.cc:5:22: warning: pure virtual 'virtual void Interface::fun() const' called from constructor
5 | Interface(){ fun(); }
| ^
/tmp/ccWMVIWG.o: In function `main':
prog.cc:(.text.startup+0x13): undefined reference to `Interface::fun() const'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
但是,使用不同的方法将fun()调用包装为:
class Interface
{
public:
virtual …Run Code Online (Sandbox Code Playgroud) c++ constructor virtual-functions pure-virtual undefined-behavior