C++
Errores comunes de compilación / enlazador (GCC)
Buscar..
error: '***' no fue declarado en este alcance
Este error ocurre si se utiliza un objeto desconocido.
Variables
No compilar
#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;
}
Fijar:
#include <iostream>
int main(int argc, char *argv[])
{
{
int i = 2;
std::cout << i << std::endl;
}
return 0;
}
Funciones
La mayoría de las veces, este error se produce si no se incluye el encabezado necesario (por ejemplo, utilizando
std::cout
sin#include <iostream>
)
No compilar
#include <iostream>
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
Fijar:
#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: El compilador interpreta el código de arriba a abajo (simplificación). Todo debe ser al menos declarado (o definido) antes de su uso.
referencia indefinida a `*** '
Este error del enlazador ocurre, si el enlazador no puede encontrar un símbolo usado. La mayoría de las veces, esto sucede si una biblioteca usada no está vinculada.
qmake:
LIBS += nameOfLib
cmake:
TARGET_LINK_LIBRARIES(target nameOfLib)
llamada g ++:
g++ -o main main.cpp -Llibrary/dir -lnameOfLib
También se podría olvidar compilar y vincular todos los archivos .cpp
utilizados (functionsModule.cpp define la función necesaria):
g++ -o binName main.o functionsModule.o
error fatal: ***: No existe tal archivo o directorio
El compilador no puede encontrar un archivo (un archivo de origen usa #include "someFile.hpp"
).
qmake:
INCLUDEPATH += dir/Of/File
cmake:
include_directories(dir/Of/File)
llamada g ++:
g++ -o main main.cpp -Idir/Of/File