我想在同一个主文件中转发声明类似模板函数的模板类。但我得到一个错误,我的班级类型不完整,无法定义。 这是我的代码。
#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;}
};
答案 0 :(得分:2)
f.__proto__ = obj;
这是一个好的开始。这是一个完美的前瞻性声明。
template <class T> class Foo;
不幸的是,此时编译器需要知道模板类实际上是什么。前瞻性声明已不再适用。在这一点上,编译器甚至不知道这个类有多大,所以如何创建一个它不知道的大小的对象呢?
前向声明足以声明指针或对类实例的引用(如果它是常规类或模板则无关紧要)。您不需要知道类声明指针或对它的引用有多大。对于其他一些事情,您也不需要知道类的大小,但是前向声明不足以声明类本身的实例。此时必须定义该类。
这与模板类无关。所有类,模板和常规类都适用。