J'utilise un compilateur croisé. Mon code est:
class WindowsTimer{
public:
WindowsTimer(){
_frequency.QuadPart = 0ull;
}
private:
static LARGE_INTEGER _frequency;
};
J'obtiens l'erreur suivante:
référence non définie à `WindowsTimer :: _ fréquence '
J'ai aussi essayé de le changer en
LARGE_INTEGER _frequency.QuadPart = 0ull;
ou
static LARGE_INTEGER _frequency.QuadPart = 0ull;
mais je reçois toujours des erreurs.
quelqu'un sait pourquoi?
Vous devez définir _frequency
dans le fichier .cpp.
c'est à dire.
LARGE_INTEGER WindowsTimer::_frequency;
L'éditeur de liens ne sait pas où allouer les données pour _frequency
et vous devez le dire manuellement. Vous pouvez y parvenir en ajoutant simplement cette ligne: LARGE_INTEGER WindowsTimer::_frequency = 0;
dans l'une de vos sources C++.
Explication plus détaillée ici
S'il y a une variable statique déclarée à l'intérieur de la classe, vous devez la définir dans le fichier cpp comme ceci
LARGE_INTEGER WindowsTimer::_frequency = 0;
Avec C++ 17, vous pouvez déclarer votre variable inline , plus besoin de la définir dans un fichier cpp.
inline static LARGE_INTEGER _frequency;