Maison >développement back-end >C++ >Comment résoudre l'erreur de compilation C++ : « référence non définie à » ?
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 :
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(); };
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()
Si la déclaration et la définition de la fonction sont cohérentes et assurez-vous que le fichier d'en-tête MyClass.h
est correctement référencé. MyClass
的类,在File1.cpp
中调用了一个名为foo()
的函数,在File2.cpp
中实现了foo()
函数的定义。注意,在MyClass.h
头文件中声明了MyClass
类。如果在编译File1.cpp
和File2.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 }
在上述示例代码中,File1.cpp
依赖于File2.cpp
中定义的foo()
函数。如果在编译时出现"undefined reference to 'foo()'"的错误,应该检查File2.cpp
g++ -o main File2.cpp File1.cppDans 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
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!