R6025 – pure virtual function call

今天的一个程序出了 R6025 – pure virtual function call 错误,主要原因是在基类的构造函数中调用了纯虚函数。
1. 如果不是纯虚函数,没问题。
2. 如果构造函数直接调用纯虚函数,链接时会出错。只有通过一个其它成员函数转调一下。

下面是一个简化的例子:
class CBase
{
public:
CBase() { func2(); }
virtual void func() = 0;
void func2()
{
func();
}
};

class CDrived : public CBase
{
public:
CDrived() { }
virtual void func() { printf(“hello”); }
};

int _tmain(int argc, _TCHAR* argv[])
{
CDrived * d = new CDrived();

return 0;
}