我知道有一百万个关于此的帖子,但我仍然无法弄清楚为什么这不起作用= /
这一行:
test = new Test2<Test>;
给了我这个错误:
error C2512: 'Test2<PARENT>' : no appropriate default constructor available
with
[
PARENT=Test
]
代码:
template<class PARENT>
class Test2;
////////////////////////////
class Test
{
public:
Test2<Test> *test;
Test()
{
test = new Test2<Test>;
}
};
/////////////////////////////
template<class PARENT>
class Test2
{
public:
PARENT *parent;
};
////////////////////////////
有人可以帮助我吗?
答案 0 :(得分:6)
在实例化时(即在Test
构造函数内),到目前为止,所有编译器都是Test2<>
的前向声明;它还不知道可用的构造函数。
要解决,请移动Test2<>
的定义 Test
之前的定义,或将Test
构造函数的定义移到类定义之外(和之后 Test2<>
)的定义。
答案 1 :(得分:0)
对我来说,你的代码给出(正确地,恕我直言)错误:
invalid use of incomplete type 'struct Test2<Test>'
这与g ++ 4.5.1有关。在你说的时候:
test = new Test2<Test>;
Test2尚未定义,只是前向声明。
答案 2 :(得分:-1)
行test = new Test2<Test>;
正在Test的默认构造函数中执行。
这一行将调用没有参数的默认构造函数/构造函数。在调用上述语句时,Test的构造函数仍然不完整。