Почему невозможно определить полностью определенную функцию во внешнем пространстве имен?Могу ли я знать, что говорит стандарт? - PullRequest
0 голосов
/ 09 февраля 2011

Это неправильно?Зачем?Могу ли я знать, что говорится в стандарте?

 namespace N{
  namespace N1{
     namespace N2{
        struct A{
         struct B{
          void fun();
       };//B
     }; //A
   } //n2
 }//n1
 namespace N3{
     void N1::N2::A::B::fun(){} //error
 }//n3
}//n

int main()
 {
  return 0;
 }

Могу ли я знать, почему он не работает?

Ответы [ 3 ]

6 голосов
/ 09 февраля 2011

Это недействительно из-за §9.3 / 2:

Определение функции-члена, которое появляется вне определения класса, должно появляться в области имен, включающей определение класса.

Область действия пространства имен N3 не включает определение класса B

0 голосов
/ 09 февраля 2011

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

0 голосов
/ 09 февраля 2011

Вот гораздо более простой пример, который также не компилируется:

namespace N1 { 
  void f() ;
}

namespace N2 {
  void N1::f() { }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...