【问题标题】:how to forward declare a template class like template function in the same main file如何在同一个主文件中转发声明模板类,如模板函数
【发布时间】:2026-02-14 02:45:01
【问题描述】:

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

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

【问题讨论】:

    标签: c++ templates


    【解决方案1】:
    template <class T> class Foo;
    

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

    Foo<int> ok;
    

    不幸的是,此时编译器需要知道模板类实际上是什么。前向声明已不再足够。编译器现在也不知道这个类有多大,怎么创建一个不知道大小的对象呢?

    前向声明足以声明指向类实例的指针或引用(它是普通类还是模板都没有关系)。您不需要知道声明指针或对它的引用的类有多大。您也不需要知道一个类对于其他一些事情有多大,但是前向声明不足以声明类本身的实例。此时必须定义类。

    这与模板类无关。这适用于所有类、模板类和常规类。

    【讨论】:

    • 我想了解更多关于声明函数和我尝试做的事情之间的区别(在这个问题中)。
    • 你在这个问题中试图做的与声明任何函数无关。