Maison > développement back-end > C++ > le corps du texte

Comment résoudre l'erreur de compilation C++ : « référence non définie à » ?

WBOY
Libérer: 2023-08-26 22:06:25
original
3664 Les gens l'ont consulté

如何解决C++编译错误:'undefined reference to'?

Comment résoudre l'erreur de compilation C++ : « référence non définie à » ?

Introduction : 
Lors de la programmation en C++, vous rencontrerez parfois des messages d'erreur de compilation similaires à "référence non définie à". Ce type d'erreur est généralement provoqué par une erreur de liaison, provoquée par l'incapacité du compilateur à trouver la définition de la fonction ou de la variable appropriée pendant le processus de liaison. Cet article présentera quelques causes et solutions courantes, et utilisera des exemples de code pour aider les lecteurs à mieux comprendre et résoudre ces problèmes.

1. Analyse des causes :

  1. Fonction/variable non définie : lors de l'utilisation d'une fonction ou d'une variable, si la définition correspondante n'est pas trouvée dans le code, une erreur "référence non définie" se produira. Cela peut être dû à une faute d'orthographe du nom de la fonction/variable, à une déclaration ou une définition de fonction/variable incohérente, à une fonction/variable non incluse correctement, etc.
  2. Ordre de liaison incorrect : s'il existe plusieurs fichiers sources dans le code et qu'il existe des interdépendances entre eux, le compilateur doit créer un lien dans le bon ordre lors de la liaison. Si l’ordre de liaison est erroné, des erreurs de « référence non définie » se produiront.

2. Solution :
1. Vérifiez les définitions et les déclarations des fonctions/variables : Tout d'abord, assurez-vous que le nom de la fonction/variable est correctement orthographié, en accordant une attention particulière aux majuscules. Deuxièmement, vérifiez si la déclaration et la définition de la fonction/variable sont cohérentes, y compris les types de paramètres, les types de valeurs de retour, etc. Si la fonction/variable est définie dans d'autres fichiers source, assurez-vous de référencer le fichier d'en-tête correct et de compiler et lier les fichiers source ensemble.

Exemple de code 1 :

// File1.cpp
#include "MyClass.h"
void foo();

int main() {
    foo();
    return 0;
}

// File2.cpp
#include <iostream>
#include "MyClass.h"
void foo() {
    MyClass obj;
    obj.bar();
}

// MyClass.h
class MyClass {
public:
    void bar();
};
Copier après la connexion

Dans l'exemple de code ci-dessus, nous définissons une classe nommée MyClass et appelons une classe nommée File1.cpp La fonction code>foo( ) implémente la définition de la fonction foo() dans File2.cpp. Notez que la classe MyClass est déclarée dans le fichier d'en-tête MyClass.h. Si l'erreur "référence non définie à 'foo()'" se produit lors de la compilation de File1.cpp et File2.cpp, vous devez vérifier foo()</code > Si la déclaration et la définition de la fonction sont cohérentes et assurez-vous que le fichier d'en-tête <code>MyClass.h est correctement référencé. MyClass的类,在File1.cpp中调用了一个名为foo()的函数,在File2.cpp中实现了foo()函数的定义。注意,在MyClass.h头文件中声明了MyClass类。如果在编译File1.cppFile2.cpp时出现"undefined reference to 'foo()'"的错误,应该检查foo()函数的声明和定义是否一致,并确保正确引用了MyClass.h头文件。

2.检查链接顺序:如果代码中存在多个源文件,并且它们之间有相互依赖的关系,编译器在链接时需要按照正确的顺序进行链接。我们可以通过将源文件按正确的顺序传递给编译器来解决此问题,或者使用链接器提供的命令行选项指定链接顺序。

示例代码2:

// File1.cpp
#include "File2.h"
void foo();

int main() {
    foo();
    return 0;
}

// File2.h
void foo();

// File2.cpp
#include "File2.h"
void foo() {
    // do something
}
Copier après la connexion

在上述示例代码中,File1.cpp依赖于File2.cpp中定义的foo()函数。如果在编译时出现"undefined reference to 'foo()'"的错误,应该检查File2.cpp

2. Vérifiez l'ordre des liens : s'il existe plusieurs fichiers sources dans le code et qu'il existe des interdépendances entre eux, le compilateur doit créer un lien dans le bon ordre lors de la liaison. Nous pouvons résoudre ce problème en transmettant les fichiers sources au compilateur dans le bon ordre, ou en spécifiant l'ordre des liens à l'aide des options de ligne de commande fournies par l'éditeur de liens.

Exemple de code 2 :

g++ -o main File2.cpp File1.cpp
Copier après la connexion

Dans l'exemple de code ci-dessus, File1.cpp dépend de foo() défini dans la fonction File2.cpp . Si une erreur "référence non définie à 'foo()'" se produit lors de la compilation, vous devez vérifier si l'ordre de compilation de File2.cpp est correct. Nous pouvons compiler ces deux fichiers dans le bon ordre, par exemple :

g++ -o main File1.cpp File2.cpp
Copier après la connexion

ou préciser l'ordre des liens au moment de la compilation : rrreee🎜 Attention, il peut y avoir des cas plus complexes qui doivent être ajustés au cas par cas. base. 🎜🎜Conclusion : 🎜En programmation C++, l'erreur "référence non définie à" est une erreur de liaison courante. Lors de la résolution de cette erreur, nous devons revérifier les définitions et déclarations de fonctions/variables pour nous assurer que leurs noms sont correctement orthographiés et que leurs portées sont correctes. Dans le cas de plusieurs fichiers sources, vous devez également vérifier spécifiquement si l'ordre des liens est correct. Grâce aux solutions et aux exemples de codes ci-dessus, je pense que les lecteurs peuvent mieux comprendre et résoudre ces erreurs et améliorer leur efficacité de programmation. 🎜

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