模板类内部的双嵌套类正向声明

double-nested class forward declaration inside a template class

本文关键字:嵌套 声明 内部      更新时间:2023-10-16

当使用g++4.6.2 编译下一个代码时,我得到了"15:14:错误:模板参数列表太少">

template <class T>
class A
{
public:
    class B
    {
    public:
        class C; //forward declaration
    };
    class D
    {
    //using B
    };
    class B::C // error here
    {
    //using D
    };
//using B::C
};
/* works fine, but required into "A"
template <class T>
class A<T>::B::C
{
public:
};
*/

如何在不改变声明顺序的情况下解决问题?

正如您所发现的,您没有在内部范围中定义前向声明的类,您必须在相应的外部范围中定义。您的"工作良好"代码似乎可以使用g++4.5进行良好编译。你是说当你尝试"工作正常"的方式时,第19行会出错吗?这是因为它缺少一个终止的;