如何在同一主文件中转发声明模板类的模板类

时间:2016-06-04 00:58:26

标签: c++ templates

我想在同一个主文件中转发声明类似模板函数的模板类。但我得到一个错误,我的班级类型不完整,无法定义。 这是我的代码。

#include <iostream>

template <class T> class Foo;

int main()
{
    Foo<int> ok;
    std::cout << "Hello world!" << std::endl;
    return 0;
}

template <class T>
class Foo
{
private:
    int test;
public:
    Foo() {test = 1;}
};

1 个答案:

答案 0 :(得分:2)

f.__proto__ = obj;

这是一个好的开始。这是一个完美的前瞻性声明。

template <class T> class Foo;

不幸的是,此时编译器需要知道模板类实际上是什么。前瞻性声明已不再适用。在这一点上,编译器甚至不知道这个类有多大,所以如何创建一个它不知道的大小的对象呢?

前向声明足以声明指针或对类实例的引用(如果它是常规类或模板则无关紧要)。您不需要知道类声明指针或对它的引用有多大。对于其他一些事情,您也不需要知道类的大小,但是前向声明不足以声明类本身的实例。此时必须定义该类。

这与模板类无关。所有类,模板和常规类都适用。