无法在命å空间范围上分é…å˜é‡

时间:2018-04-09 08:43:37

标签: c++ c++11 c++14

我碰到了basic.scope.namespace#1并且脑å­é‡Œæœ‰äº›ä¸æ¸…楚的地方:

namespace Foo {
  int a;
}

namespace Foo {
  // Foo::a = 2;   // Why can't do an assignment here?
  void b() {
      Foo::a = 2;  // OK
  }
}

输出

error: ‘a’ does not name a type

我很好奇为什么我们无法对命å空间范围进行分é…,

虽然功能å—内的赋值是正确的å—?

有什么想法å—?

2 个答案:

答案 0 :(得分:5)

您ä¸èƒ½åœ¨å‡½æ•°ä¹‹å¤–使用一般语å¥ã€‚

也许您首先需è¦å£°æ˜Žè€Œç¬¬äºŒä¸ªå®šä¹‰ï¼Ÿ

åƒ

namespace Foo {
  extern int a;  // Declare variable
}

namespace Foo {
  int a = 2;  // Define and initialize the variable
}

答案 1 :(得分:2)

  

我很好奇为什么命å空间作用域中的赋值被视为定义,

赋值是表达å¼è¯­å¥ï¼Œè¡¨è¾¾å¼ä¸èƒ½åœ¨å‘½å空间范围内。åªæœ‰å£°æ˜Žè¯­å¥å¯ä»¥åœ¨å‘½å空间范围内(定义是声明)。

  

虽然功能å—内的赋值ä¸æ˜¯å—?

表达å¼è¯­å¥å¯ä»¥åœ¨å—范围内。