未定义的静态const成员引用

时间:2016-09-01 12:18:52

标签: c++ static-members undefined-reference

我的这个问题在Cpp.sh上被复制,C ++ 14被激活(我不知道这是否相关......)

我有这个程序:

// Example program 1
#include <iostream>
#include <vector>

class Constants
{
  public:
    static const int64_t constant_1 = -123;
};

int main()
{
  std::vector<int64_t> vec;
  vec.push_back(static_cast<int64_t>(Constants::constant_1));
  std::cout << vec.size() << std::endl;
}

输出结果为:

1

现在我尝试删除static_cast。这给了我这个程序:

// Example program 2
#include <iostream>
#include <vector>

class Constants
{
  public:
    static const int64_t constant_1 = -123;
};

int main()
{
  std::vector<int64_t> vec;
  vec.push_back(Constants::constant_1);
  std::cout << vec.size() << std::endl;
}

这给出了以下输出:

/tmp/cceayEj1.o: In function `main':
:(.text.startup+0x2): undefined reference to `Constants::constant_1'
collect2: error: ld returned 1 exit status

我的理解是可以在类声明(How to initialize a static const member in C++?)中初始化静态成员,所以我猜这与初始化无关。

为什么我的exampel计划中必须static_cast

0 个答案:

没有答案