web-dev-qa-db-fra.com

Référence non définie à un membre statique

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?

66
kakush

Vous devez définir _frequency dans le fichier .cpp.

c'est à dire.

LARGE_INTEGER WindowsTimer::_frequency;
83
Ed Heal

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

27
Vyktor

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;
18
Raghuram

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;
7
Zhenxiao Hao