在模板化类[重复]中使用嵌套嵌套类时,“依赖名称不是类型”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在模板化类[重复]中使用嵌套嵌套类时,“依赖名称不是类型”相关的知识,希望对你有一定的参考价值。

有谁知道为什么以下无法编译(在MSVC2015中测试)?

template<int N> // when this line is removed it compiles successfully
class A {
    class B {
    public:
        class C {
        };
    };
    void func(B b){} // compiles fine
    void func(B::C c){} // generates warning C4346 and error C2061
};

它在标有注释的行上生成以下内容:

  • warning C4346: 'A<N>::B::C': dependent name is not a type
  • error C2061: syntax error: identifier 'C'
答案

让我们为你谷歌吧。

如果要将依赖名称视为类型,则typename关键字为requiretd。

C ++规则。

14.6名称解析

假定模板声明或定义中使用的名称以及依赖于模板参数的名称不会命名类型,除非适用的名称查找包含类型名称或名称由关键字typename限定。

以上是关于在模板化类[重复]中使用嵌套嵌套类时,“依赖名称不是类型”的主要内容,如果未能解决你的问题,请参考以下文章

从一个嵌套类继承到另一个嵌套类时出错

gcc 编译带有大量模板参数的模板类时出错

类中嵌套另一个类时,调用构造,析构,拷贝,赋值运算符等函数的次序

Firebase列表的嵌套Angular2 ngFor指令[重复]

java 嵌套类

关键字“new”是如何工作的,尤其是当我启动静态嵌套类时? [复制]