【发布时间】:2013-04-04 00:12:47
【问题描述】:
下面的错误让我很困惑。这是一段更复杂的代码。我觉得很奇怪,只有模板化构造函数和虚方法同时存在才会导致错误,并且只有在复制初始化对象时才会发生错误。
有人有想法吗?谢谢。
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;
}
【问题讨论】:
标签: c++ templates visual-c++ multiple-inheritance virtual-functions