C++
Erreurs courantes de compilation / édition de liens (GCC)
Recherche…
erreur: '***' n'a pas été déclaré dans cette portée
Cette erreur se produit si un objet inconnu est utilisé.
Les variables
Ne pas compiler:
#include <iostream>
int main(int argc, char *argv[])
{
{
int i = 2;
}
std::cout << i << std::endl; // i is not in the scope of the main function
return 0;
}
Réparer:
#include <iostream>
int main(int argc, char *argv[])
{
{
int i = 2;
std::cout << i << std::endl;
}
return 0;
}
Les fonctions
La plupart du temps, cette erreur se produit si l'en-tête nécessaire n'est pas inclus (par exemple, en utilisant
std::cout
sans#include <iostream>
)
Ne pas compiler:
#include <iostream>
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
Réparer:
#include <iostream>
void doCompile(); // forward declare the function
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
Ou:
#include <iostream>
void doCompile() // define the function before using it
{
std::cout << "No!" << std::endl;
}
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
Note: Le compilateur interprète le code de haut en bas (simplification). Tout doit être au moins déclaré (ou défini) avant utilisation.
référence indéfinie à «***»
Cette erreur de l'éditeur de liens se produit si l'éditeur de liens ne parvient pas à trouver un symbole utilisé. La plupart du temps, cela se produit si une bibliothèque utilisée n'est pas liée.
qmake:
LIBS += nameOfLib
cmake:
TARGET_LINK_LIBRARIES(target nameOfLib)
appel g ++:
g++ -o main main.cpp -Llibrary/dir -lnameOfLib
On pourrait également oublier de compiler et de lier tous les fichiers .cpp
utilisés (functionsModule.cpp définit la fonction nécessaire):
g++ -o binName main.o functionsModule.o
erreur fatale: ***: aucun fichier ou répertoire de ce type
Le compilateur ne peut pas trouver de fichier (un fichier source utilise #include "someFile.hpp"
).
qmake:
INCLUDEPATH += dir/Of/File
cmake:
include_directories(dir/Of/File)
appel g ++:
g++ -o main main.cpp -Idir/Of/File