2010-11-12 4 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

Вы всегда должны указать ошибку, которую получите в таких вопросах. –

ответ

5

Как удалить ошибку в строке 2?

Использование Разработал Тип Тендерный, то есть вместо того, чтобы писать A b; писать struct A b;.

спецификаторы 3.4.4 типа Разработала

развернутую типа Спецификатор может быть использован для обозначения класса имя-ранее объявленного или имя-перечислений даже если имя было скрыто декларация непигового типа (3.3.7). Имя класса или имя перечисления в специфицированном спецификаторе типа может быть либо простым идентификатором, либо быть квалифицированным идентификатором.


Почему я получаю сообщение об ошибке в любом случае?

Поскольку A снаружи основной спрятан внутри основной после определения int A. Единственным способом доступа к struct A является использование спецификатора специфицированного типа.

3.3.7 Имя скрывается

2) имя класса (9.1) или имя перечисления (7.2) может быть скрыта по имени объекта, функции или счетчику, объявленного в том же объеме, , Если имя класса или перечисления и объект, функция или перечислитель объявлены в той же области (в любом порядке) с тем же именем, имя класса или перечисления скрыто везде, где вид объекта, функции или имени счетчика ,

Смежные вопросы