下面的错误让我感到困惑。这是一段更复杂的代码。对我来说很奇怪,只有模板化构造函数和虚拟方法的存在才会导致错误,并且只有在复制初始化对象时才会发生错误。
有人有想法吗?谢谢。
class A
{
long *p;
public:
A():p(0)
{
}
template<class T>
A(T val):p(val)// 1
{
}
operator long*()
{
return p;
}
};
class B
{
virtual void f()// 2
{
}
};
class C : public A, public B
{
};
void main()
{
C c;
下一行main()
是
A a=c;
// 1
如果标记的行和// 2
都存在,则会触发以下错误:
warning C4717: 'C::C' : recursive on all control paths, function will cause runtime stack overflow
但是在 中使用以下内容时main()
,没有错误:
A a;
a=c;
}