问题
I\'m using a cross compiler. My code is:
class WindowsTimer{
public:
WindowsTimer(){
_frequency.QuadPart = 0ull;
}
private:
static LARGE_INTEGER _frequency;
};
I get the following error:
undefined reference to `WindowsTimer::_frequency\'
I also tried to change it to
LARGE_INTEGER _frequency.QuadPart = 0ull;
or
static LARGE_INTEGER _frequency.QuadPart = 0ull;
but I\'m still getting errors.
anyone knows why?
回答1:
You need to define _frequency
in the .cpp file.
i.e.
LARGE_INTEGER WindowsTimer::_frequency;
回答2:
Linker doesn't know where to allocate data for _frequency
and you have to tell it manually. You can achieve this by simple adding this line: LARGE_INTEGER WindowsTimer::_frequency = 0;
into one of your C++ sources.
More detailed explanation here
回答3:
If there is a static variable declared inside the class then you should define it in the cpp file like this
LARGE_INTEGER WindowsTimer::_frequency = 0;
回答4:
With C++17, you can declare your variable inline, no need to define it in a cpp file any more.
inline static LARGE_INTEGER _frequency;
来源:https://stackoverflow.com/questions/9110487/undefined-reference-to-a-static-member