我正在使用交叉编译器。我的代码是:
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;
但我仍然遇到错误。
谁知道为什么?答案 0 :(得分:79)
您需要在.cpp文件中定义_frequency
。
即
LARGE_INTEGER WindowsTimer::_frequency;
答案 1 :(得分:26)
链接器不知道在哪里为_frequency
分配数据,您必须手动告诉它。您可以通过简单地将此行LARGE_INTEGER WindowsTimer::_frequency = 0;
添加到您的一个C ++源中来实现此目的。
更详细的解释here
答案 2 :(得分:18)
如果在类中声明了一个静态变量,那么你应该在cpp文件中定义它,就像这个
一样LARGE_INTEGER WindowsTimer::_frequency = 0;
答案 3 :(得分:4)
使用C ++ 17,您可以声明变量inline,而无需再在cpp文件中定义它。
inline static LARGE_INTEGER _frequency;
答案 4 :(得分:0)
这是 this other question 的完整代码示例,它确实是此示例的副本。
#include <iostream>
#include <vector>
using namespace std;
class Car
{
public:
static int b; // DECLARATION of a static member
static char* x1(int x)
{
b = x; // The static member is used "not as a constant value"
// (it is said ODR used): definition required
return (char*)"done";
}
};
int Car::b; // DEFINITION of the static
int main()
{
char* ret = Car::x1(42);
for (int x = 0; x < 4; x++)
{
cout << ret[x] << endl;
}
return 0;
}