模板类中的双嵌套类前向声明

时间:2013-02-26 19:13:06

标签: c++ templates compiler-errors declaration

使用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:
};
*/

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

1 个答案:

答案 0 :(得分:0)

正如您所发现的,您没有在内部作用域中定义前向声明的类,您必须在相应的外部作用域中进行定义。您的“工作正常”代码似乎可以使用g ++ 4.5进行编译。你是说当你尝试“工作正常”的方式第19行给出错误?那是因为它缺少终止;