"Invalid use of non-static data member" 从全局变量初始化静态成员时

"Invalid use of non-static data member" when initializing static member from global variable

class A {
    int x;
    static int i;
};


int x = 10;
int A::i = x;

当我编译上面的代码时,出现错误

<source>:8:12: error: invalid use of non-static data member 'A::x'
    8 | int A::i = x;
      |            ^
<source>:2:9: note: declared here
    2 |     int x;
      |         ^

导致此错误的原因是什么?

这是一种特殊的语言怪癖 - int A::i 中左侧的作用域解析会影响右侧的查找作用域,因此实际上指的是 [=13] 的 x 成员=].

重命名其中一个变量,或明确指定所需 x 的范围:

int A::i = ::x;