


Pourquoi est-ce que j'obtiens des erreurs « Référence non définie à un membre statique » lors d'une compilation croisée ?
Dec 18, 2024 pm 08:46 PMRéférence non résolue à un membre statique dans la compilation croisée
Lorsque vous travaillez avec des compilateurs croisés, il est courant de rencontrer des erreurs liées à des références non résolues à des compilateurs statiques. membres. Cela se produit lorsqu'une variable statique est déclarée dans un en-tête de classe mais n'est pas définie dans le fichier .cpp correspondant.
Explication du problème :
Considérez l'exemple de code fourni :
class WindowsTimer { public: WindowsTimer() { _frequency.QuadPart = 0ull; } private: static LARGE_INTEGER _frequency; };
La variable statique _fréquence est déclarée dans la définition de la classe mais n'est pas définie. Lors de la tentative de création du code, l'éditeur de liens ne parvient pas à résoudre la référence à _fréquence, ce qui entraîne une erreur de référence non définie.
Solution :
Pour résoudre ce problème, l'éditeur de liens La variable statique doit être définie dans le fichier .cpp correspondant. Cela peut être fait comme suit :
// WindowsTimer.cpp LARGE_INTEGER WindowsTimer::_frequency;
Raisonnement :
Les variables statiques, contrairement aux variables d'instance, sont partagées entre toutes les instances d'une classe. Ils nécessitent donc une définition unique dans le programme. En définissant la variable statique dans le fichier .cpp, l'éditeur de liens peut localiser et résoudre avec succès la référence à celle-ci.
Notes supplémentaires :
- Le message d'erreur "référence non définie à WindowsTimer::_fréquence'" indique explicitement que l'éditeur de liens est incapable de trouver une définition pour la variable _fréquence dans le contexte de la classe WindowsTimer`.
- Modification de la déclaration de _fréquence comme LARGE_INTEGER _fréquence.QuadPart = 0ull; ou statique LARGE_INTEGER _ Frequency.QuadPart = 0ull ; ne résoudra pas le problème, car ces déclarations s'appliquent uniquement à l'instance individuelle de _fréquence dans l'objet et non à la définition statique.
- Il est important de s'assurer que la définition de la variable statique dans le fichier .cpp correspond la déclaration dans le fichier d'en-tête. Les discordances peuvent entraîner un comportement inattendu ou des erreurs de compilation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Gulc: Cibliothèque C construite à partir de zéro

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour?

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les

Utilisation distincte et partage de phrases

Où est la valeur de retour de la fonction de langue C stockée en mémoire?

Comment fonctionne la bibliothèque de modèle standard C (STL)?

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)?
