未定义对静态成员的引用


91

我正在使用交叉编译器。我的代码是:

class WindowsTimer{
public:
  WindowsTimer(){
    _frequency.QuadPart = 0ull;
  } 
private:
  static LARGE_INTEGER _frequency;
};

我收到以下错误:

未定义对WindowsTimer :: _ frequency的引用

我也尝试将其更改为

LARGE_INTEGER _frequency.QuadPart = 0ull;

要么

static LARGE_INTEGER _frequency.QuadPart = 0ull;

但我仍然遇到错误。

谁知道为什么?



您在哪里定义 (如果有的话)WindowsTimer::_frequency
CB Bailey

@CharlesBailey这是我班上唯一的成员。
kakush 2012年

Answers:


107

您需要_frequency在.cpp文件中定义。

LARGE_INTEGER WindowsTimer::_frequency;

我为什么要这样做?
nowox

35

链接器不知道在何处分配数据_frequency,您必须手动告诉它。您可以通过简单地将以下行添加LARGE_INTEGER WindowsTimer::_frequency = 0;到您的C ++源代码中来实现此目的。

这里有更详细的解释


28

使用C ++ 17,您可以声明变量inline,而无需再在cpp文件中定义它。

inline static LARGE_INTEGER _frequency;

这给了我一个错误error: 'foobar' declared as an 'inline' field
Pedro Henrique

3
NVM,我刚刚通过MinGW Manager将我的GCC从6.3更新到了8.2,并且工作正常。
Pedro Henrique

24

如果在类中声明了静态变量,则应在cpp文件中定义它,如下所示

LARGE_INTEGER WindowsTimer::_frequency = 0;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.