Hul*_*gan 3 c++ compiler-errors
看看我的示例代码
struct A
{
int member;
};
int main()
{
int A; //Line 1
A b; //Line 2
b.member = int(); //Line 3
}
Run Code Online (Sandbox Code Playgroud)
错误是
prog.cpp: In function ‘int main()’:
prog.cpp:9: error: expected `;' before ‘b’
prog.cpp:9: warning: statement has no effect
prog.cpp:10: error: ‘b’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
如何在第二行访问结构A?为什么我还是得到错误?
如何删除第2行中的错误?
使用Elaborated Type Specifier,即代替A b;写入struct A b;.
3.4.4详细说明的类型说明符
精心设计的类型说明符可用于引用先前声明的类名或枚举名,即使该名称已被非类型声明隐藏(3.3.7).elaborated-type-specifier中的class-name或enum-name可以是简单的标识符,也可以是qualified-id.
为什么我还是得到错误?
因为A外部主要在定义之后隐藏在主内部int A.访问的唯一方法struct A是使用elaborated-type-specifier.
3.3.7名称隐藏
2)类名(9.1)或枚举名(7.2)可以通过在同一范围内声明的对象,函数或枚举器的名称隐藏.如果类或枚举名称以及对象,函数或枚举器在具有相同名称的同一作用域(按任何顺序)中声明,则在对象,函数或枚举器名称可见的任何位置都会隐藏类或枚举名称.