Это будет работать, если вы введете ;
после определения класса. Но это не будет работать так, как вы ожидаете. Во-первых, он пытается выяснить, о каком пространстве имен вы говорите. Сначала он ищет ::Stuff::Stuff
, а когда он не находит его, то ищет пространство имен ::Stuff
. Он находит это пространство имен, поэтому он ищет в этом пространстве имен Sprite
и находит ваш класс.
Если у вас есть незанятое пространство имен, оно ищет этот путь к пространству имен в текущем пространстве имен, затем во вложенном пространстве имен, затем во вложенном пространстве имен ... и т. Д. ... до тех пор, пока оно не достигнет пространства имен верхнего уровня.
Смотрите мой вопрос:
По моему мнению, люди должны быть намного осторожнее, чем когда они обращаются к пространствам имен. Вряд ли кто-либо когда-либо использует спецификацию пространства имен с привязкой к корневому каталогу, даже если это так, потому что они действительно означают конкретное абсолютное пространство имен, а не имя относительно текущего пространства имен.
Вот несколько интересных случаев:
1 namespace Bar {
2
3 class A {
4 };
5
6 } // end namespace ::Bar
7
8 namespace Foo {
9
10 class A {
11 };
12
13 Foo::A joe; // Refers to the A declared on line 10
14
15 namespace Foo {
16 }
17
18 Foo::A fred; // Error, finds ::Foo::Foo and doesn't find A there.
19 ::Foo::A fred; // Works and refers to the A declared on line 10
20
21 Bar::A barney; // Works, and refers to the A declared on line 3
22
23 namespace Bar {
24
25 class A {
26 };
27
28 } // end namespace ::Foo::Bar
29
30 Bar::A wilma; // Works, and refers to the A declared on line 25
31 ::Bar::A betty; // Also works, and refers to the A declared on line 3
32 ::Foo::Bar::A dino; // Also works, and refers to the A declared on line 25
33 } // end namespace ::Foo