Maison > développement back-end > C++ > Pourquoi est-ce que je reçois des références non définies à des méthodes virtuelles et à des constructeurs dans mes erreurs GCC C Linker ?

Pourquoi est-ce que je reçois des références non définies à des méthodes virtuelles et à des constructeurs dans mes erreurs GCC C Linker ?

DDD
Libérer: 2024-12-01 21:15:12
original
967 Les gens l'ont consulté

Why Am I Getting Undefined References to Virtual Methods and Constructors in My GCC C   Linker Errors?

Résolution des erreurs de l'éditeur de liens GCC C : références non définies aux méthodes virtuelles et aux constructeurs

Les erreurs de l'éditeur de liens rencontrées lors de la compilation indiquent des références non résolues aux méthodes virtuelles et aux constructeurs. constructeurs au sein du projet. L'absence de ces définitions suggère que certaines déclarations manquent dans l'implémentation.

Confirmation de la compatibilité de la bibliothèque

  • Vérification du nombre de bits de la bibliothèque :

    • Utilisez la commande file sur le fichier de bibliothèque pour vérifier son type (par exemple, fichier -b somelib1.a). Cela révélera s'il s'agit d'un format 64 bits ou 32 bits.
  • Examen du contenu de la bibliothèque :

    • Inspectez le fichiers d'en-tête de la bibliothèque pour confirmer qu'elle contient les classes et méthodes que vous attendez. Alternativement, vous pouvez utiliser un outil comme nm pour répertorier les symboles définis dans la bibliothèque.

Résolution des erreurs de l'éditeur de liens

  • Références non définies au virtuel Méthodes :

    • Assurez-vous que toutes les méthodes virtuelles héritées des classes de base ont des définitions correspondantes dans les classes dérivées. Le compilateur peut exiger ces définitions même si les méthodes ne sont pas explicitement remplacées.
  • Références non définies aux constructeurs :

    • Implémentez les constructeurs pour les classes qui provoquent des erreurs de l'éditeur de liens. Les constructeurs sont implicitement définis lorsqu'ils ne sont pas déclarés manuellement, mais en présence de méthodes virtuelles ou de constructeurs de classe de base, des définitions explicites sont nécessaires.

Exemple

Considérez l'extrait de code :

class Base
{
public:
    virtual void f() = 0;
};

class Derived : public Base
{
};
Copier après la connexion

Pour résoudre l'erreur de l'éditeur de liens, le constructeur suivant l'implémentation doit être ajoutée à la classe Derived :

Derived::Derived() {}
Copier après la connexion

Considérations supplémentaires

  • Vérifiez que les indicateurs de l'éditeur de liens sont correctement configurés pour rechercher les chemins nécessaires pour les bibliothèques .
  • Vérifiez que les fichiers d'en-tête inclus dans votre projet correspondent à la bibliothèque que vous essayez de lier à.
  • Si la bibliothèque tierce est complexe, consultez sa documentation pour connaître les exigences spécifiques ou les dépendances potentielles.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal