相关疑难解决方法(0)

在类中引入的类名不被视为嵌套类名

采取这些类定义:

班级定义1:

struct A 
{
   struct B* m_b;
};
Run Code Online (Sandbox Code Playgroud)

班级定义2:

struct A 
{
   struct B;
   B* m_b;
};
Run Code Online (Sandbox Code Playgroud)

类定义都应该声明B为嵌套类.至少,通过阅读C++ 11标准草案中的以下内容,我的想法是:

9.1/2类声明将类名引入声明它的作用域中,并在封闭作用域中隐藏该名称的任何类,变量,函数或其他声明(3.3).如果一个类名称被在一个范围内声明,其中的变量,函数,或具有相同名称的枚举还声明,那么当两个声明是在范围内,类可以被称为仅使用阐述型说明符 `

但是,g ++ 4.8.2对它们的处理方式不同.在第一个定义中,它将其视为B同类的类A.

以下程序成功构建:

struct A 
{
   struct B* m_b;
};

void myfun(const B& b )
{
}

int main()
{
   A a;
   myfun(*a.m_b);
}
Run Code Online (Sandbox Code Playgroud)

而以下程序没有:

struct A 
{
   struct B;
   B* m_b;
};

void myfun(const B& b )
{
}

int main()
{
   A a;
   myfun(*a.m_b);
}
Run Code Online (Sandbox Code Playgroud)

我理解为什么第二个程序没有编译,但我不明白为什么第一个程序是成功构建的.

我在标准的解释中遗漏了什么吗?

编译第一个程序时g …

c++ g++ c++11

13
推荐指数
1
解决办法
824
查看次数

标签 统计

c++ ×1

c++11 ×1

g++ ×1