gcc 编译错误:模板类表中嵌套类 A ​​的成员在嵌套朋友类中不可见。为啥?

Posted

技术标签:

【中文标题】gcc 编译错误:模板类表中嵌套类 A ​​的成员在嵌套朋友类中不可见。为啥?【英文标题】:gcc compiling error: member of nested class A in template class Table is not visible in nested friend class. Why?gcc 编译错误:模板类表中嵌套类 A ​​的成员在嵌套朋友类中不可见。为什么? 【发布时间】:2015-01-23 06:48:55 【问题描述】:

我试图在 windows XP 上的 mingw32 中编译一些代码,但出现错误。因此,我编写了该代码的简化版本并得到了同样的错误。 这里是:

template <class T>
class Table

public:

    class A
    
    private:
        int nEntry;
        friend class B;
    ;

    class B : public A
    
    public:
        void Remove()
        
            nEntry = 1;
        
    ;
;

编译器错误信息:

E:\cbProjects\projects\1\main.cpp||In member function 'void Table<T>::B::Remove()':|
E:\cbProjects\projects\1\main.cpp|24|error: 'nEntry' was not declared in this scope|
||=== Build finished: 1 errors, 0 warnings ===|

我可以在哪里阅读这些项目,为什么会这样? (链接将很有用 - 可能会出现一些其他类似的错误或编译器包)

【问题讨论】:

【参考方案1】:

在模板中,成员访问权限有时必须以明确的this-&gt; 开头,如本例所示。你可以让你的代码这样工作:

this->nEntry = 1;

【讨论】:

以上是关于gcc 编译错误:模板类表中嵌套类 A ​​的成员在嵌套朋友类中不可见。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

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

类成员的编译顺序之嵌套类型对类的影响

声明嵌套类模板的静态对象

两级嵌套 c++ 类适用于 GCC,但使用 Clang 失败

GCC不一致的编译错误'没有名为'的成员[重复]

gcc 编译器标志在编译期间抑制模板扩展的模板错误?