Maison > développement back-end > C++ > Pourquoi est-ce que j'obtiens des erreurs « Référence non définie à un membre statique » lors d'une compilation croisée ?

Pourquoi est-ce que j'obtiens des erreurs « Référence non définie à un membre statique » lors d'une compilation croisée ?

Patricia Arquette
Libérer: 2024-12-18 20:46:10
original
604 Les gens l'ont consulté

Why Do I Get

Ré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;
};
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal