指向静态成员变量的指针

时间:2012-07-15 07:12:46

标签: c++ pointers static-variables

  

可能重复:
  C++: undefined reference to static class member

以下C ++代码编译得很好(使用g++ -c)但它没有链接给出错误:undefined reference to Abc :: X'`

#include <iostream>

using namespace std;

class Abc {

public:
    const static int X = 99;
};

int main()
{
    Abc a1;
    cout << &(Abc::X) << endl;
}

我想知道为什么不允许这样做?

3 个答案:

答案 0 :(得分:4)

您需要实际定义静态成员,而不仅仅是声明...

main()

之前添加此行
const int Abc::X = 99;

从C ++ 17开始,您还可以执行内联静态,在这种情况下,不需要.cpp文件中的上述额外代码行:

class Abc {

public:
    inline const static int X = 99; // <-- "inline"
};

答案 1 :(得分:1)

如果您不想考虑翻译单元,静态初始化顺序和类似的东西,只需将静态常量更改为方法。

#include <iostream>
using namespace std;

class Abc {

public:
    inline static const int& X(){ 
      static int x=99;
      return x; 
    }
};

int main()
{
//    Abc a1;
    cout << &(Abc::X()) << endl;
}

答案 2 :(得分:1)

如果以需要左值的方式使用静态成员(即以某种方式要求它具有地址),那么它必须具有定义。请参阅the GCC wiki上的说明,其中包括对标准的引用以及如何解决该问题。