C++
Errori comuni di compilazione / linker (GCC)
Ricerca…
errore: '***' non è stato dichiarato in questo ambito
Questo errore si verifica se viene utilizzato un oggetto sconosciuto.
variabili
Non compilare:
#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;
}
Difficoltà:
#include <iostream>
int main(int argc, char *argv[])
{
{
int i = 2;
std::cout << i << std::endl;
}
return 0;
}
funzioni
La maggior parte delle volte questo errore si verifica se l'intestazione necessaria non è inclusa (ad esempio, usando
std::cout
senza#include <iostream>
)
Non compilare:
#include <iostream>
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
Difficoltà:
#include <iostream>
void doCompile(); // forward declare the function
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
O:
#include <iostream>
void doCompile() // define the function before using it
{
std::cout << "No!" << std::endl;
}
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
Nota: il compilatore interpreta il codice dall'alto verso il basso (semplificazione). Tutto deve essere almeno dichiarato (o definito) prima dell'uso.
riferimento a `*** 'non definito
Questo errore del linker si verifica se il linker non riesce a trovare un simbolo utilizzato. Il più delle volte, ciò accade se una libreria usata non è collegata.
qmake:
LIBS += nameOfLib
cmake:
TARGET_LINK_LIBRARIES(target nameOfLib)
chiamata g ++:
g++ -o main main.cpp -Llibrary/dir -lnameOfLib
Si potrebbe anche dimenticare di compilare e collegare tutti i file .cpp
usati (functionsModule.cpp definisce la funzione necessaria):
g++ -o binName main.o functionsModule.o
errore fatale: ***: nessun file o directory di questo tipo
Il compilatore non riesce a trovare un file (un file sorgente usa #include "someFile.hpp"
).
qmake:
INCLUDEPATH += dir/Of/File
cmake:
include_directories(dir/Of/File)
chiamata g ++:
g++ -o main main.cpp -Idir/Of/File