我知道有 100 万篇关于此的帖子,但我仍然不明白为什么这不起作用 =/

这一行:

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;
};

////////////////////////////

有人可以帮我吗?

最佳答案

在实例化时(即在 Test 构造函数内部),到目前为止,编译器所拥有的只是 Test2<> 的前向声明;它还不知道有哪些构造函数可用。

要解决这个问题,要么将 Test2<> 的定义移到 Test 的定义之前,要么将 Test 构造函数的定义移到类定义之外(并在 Test2<> 的定义之后)。

关于c++ - 模板类 : No default constructor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5990551/

10-13 09:08