2013-06-27 5 views
1

Я пытаюсь использовать приведенный ниже код, используя несколько пространств имен (меняющих пространства имен) внутри функции. Я не уверен, что это неправильно, я даже не уверен, могу ли я использовать, как показано ниже, но не нашел никаких противоречащих доказательств в моем коротком просмотре, пожалуйста, дай мне знать, что это не так:C++: несколько пространств имен внутри функции

#include <iostream> 
using namespace std; 

namespace standard_one 
{ 
     int i = 10; 
} 

namespace standard_two 
{ 
     int i = 40; 
} 


main() 
{ 
     using namespace standard_one; 
     cout << "value of i is " << i << endl; 

     { 
       using namespace standard_two; 
       cout << "value of i after namespace change is " << i << endl; // Compilation error here, compiler is complaining that "i" is undeclared 
     } 
} 
+2

Самым неправильным является то, что 'main' не имеет типа возврата. – ybungalobill

+0

@ybungalobill: Да, принято, код поспешно написан только для иллюстрации – user2460477

ответ

2

Это не необъявленный, он неоднозначный. Обе директивы using применимы к внутренней области, и поэтому оба объекта были введены в объем. Без полного определения имени компилятор не может знать, что вы имеете в виду.

Вы можете использовать полное имя и указать либо standard_one::i, либо standard_two::i, чтобы устранить двусмысленность.

Offtopic:

int main() { 
// ^^^ !!! 
0

Попробуйте как это. он неправильно указан

main() 
{ 
     cout << "value of i is " << standard_one::i << endl; 
     { 
       cout << "value of i after namespace change is " << standard_two::i << endl; 
     } 
} 
+0

o, и вы можете удалить скобки {и} после первого cout –

0

Вы должны ограничить сферу using namespace standard_one заявления, так же, как вы ограничиваете using namespace standard_two.

int main() 
{ 
     { 
      using namespace standard_one; 
      cout << "value of i is " << i << endl; 
     } 
     { 
      using namespace standard_two; 
      cout << "value of i after namespace change is " << i << endl; // Compilation error here, compiler is complaining that "i" is undeclared 
     } 
} 

Кроме того, не забудьте сделать main() возвращать int.