模板类内部的双嵌套类正向声明
double-nested class forward declaration inside a template class
当使用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行会出错吗?这是因为它缺少一个终止的;
。
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 如何在嵌套类中正确使用友元声明?
- 具有嵌套类声明的类模板 (C++)
- 如何在该接收类之外声明嵌套类的方法
- MSVC 2017 - 错误 - 如何将模板类 X 的模板成员函数声明为嵌套类 X::Y 的好友
- 以嵌套类为参数的友元模板声明
- 我们可以在main函数中声明嵌套类对象吗
- C++中嵌套模板声明的限制
- 类外的前向声明有效,但在嵌套时无效
- 声明嵌套在模板参数中的类型的变量?
- 这个嵌套结构声明是什么意思?
- 嵌套友元类所需的前向声明
- 在嵌套循环中C++变量重新声明
- 嵌套模板类声明后的嵌套模板类专业化
- 如何在C++中嵌套词法作用域可访问的作用域中声明静态信息?
- 声明嵌套基模板类实例是派生类的好友
- 是否可以避免在前向声明中使用嵌套命名空间?
- 向前声明C++中的其他嵌套结构
- Clang(OS X)要求在特定嵌套声明中"template"关键字,而VS禁止它
- 在另一个类的命名空间中声明一个类,而不进行显式嵌套声明