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 :: _ frequency '
J'ai aussi essayé de le changer en
LARGE_INTEGER _frequency.QuadPart = 0ull;
ou
static LARGE_INTEGER _frequency.QuadPart = 0ull;
mais j'obtiens toujours des erreurs.
quelqu'un sait pourquoi?
WindowsTimer::_frequency
?Réponses:
Vous devez définir
_frequency
dans le fichier .cpp.c'est à dire
la source
Linker ne sait pas où allouer les données
_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
la source
Avec C ++ 17, vous pouvez déclarer votre variable en ligne , plus besoin de la définir dans un fichier cpp.
inline static LARGE_INTEGER _frequency;
la source
error: 'foobar' declared as an 'inline' field
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;
la source