2010-11-12 53 views
3

访问外结构具有相同的名称

struct A 
{ 
    int member; 
}; 

int main() 
{ 
    int A; //Line 1 
    A b; //Line 2 
    b.member = int(); //Line 3 
} 

错误是

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 

如何访问结构的在第二行?无论如何,为什么我会得到这个错误?

+3

您应该始终包含您在此类问题中遇到的错误。 – 2010-11-12 10:55:47

回答

5

如何删除第2行中的错误?

使用Elaborated Type Specifier,即代替写A b;struct A b;

3.4.4阐述类型说明符

精心设计的类型说明符可以用来指代先前声明的类名或枚举名称尽管名称已被隐藏非类型声明(3.3.7)。详细说明类型说明符中的类名称或枚举名称可以是简单的标识符,也可以是合格标识符。


为什么反正我得到的错误?

因为A外主要是隐藏在主内后int A的定义。访问struct A的唯一方法是使用详细类型说明符。

3.3.7名称隐藏

2)类名(9.1)或枚举名称(7.2)可通过一个对象,功能的在同一范围内声明的名称,或枚举被隐藏。如果在同一作用域(以任意顺序)中声明了类或枚举名称以及同名,则在隐藏对象,函数或枚举器名称的任何位置都会隐藏类或枚举名称。

相关问题