C++
Typowe błędy kompilacji / linkera (GCC)
Szukaj…
błąd: „***” nie został zadeklarowany w tym zakresie
Ten błąd występuje, gdy używany jest nieznany obiekt.
Zmienne
Brak kompilacji:
#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;
}
Naprawić:
#include <iostream>
int main(int argc, char *argv[])
{
{
int i = 2;
std::cout << i << std::endl;
}
return 0;
}
Funkcje
Przez większość czasu ten błąd występuje, jeśli wymagany nagłówek nie jest uwzględniony (np. Użycie
std::cout
bez#include <iostream>
)
Brak kompilacji:
#include <iostream>
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
Naprawić:
#include <iostream>
void doCompile(); // forward declare the function
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
Lub:
#include <iostream>
void doCompile() // define the function before using it
{
std::cout << "No!" << std::endl;
}
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
Uwaga: Kompilator interpretuje kod od góry do dołu (uproszczenie). Wszystko musi być przynajmniej zadeklarowane (lub zdefiniowane) przed użyciem.
niezdefiniowane odniesienie do `*** '
Ten błąd linkera występuje, jeśli linker nie może znaleźć używanego symbolu. Najczęściej dzieje się tak, jeśli używana biblioteka nie jest połączona.
qmake:
LIBS += nameOfLib
cmake:
TARGET_LINK_LIBRARIES(target nameOfLib)
wywołanie g ++:
g++ -o main main.cpp -Llibrary/dir -lnameOfLib
Można również zapomnieć o skompilowaniu i połączeniu wszystkich używanych plików .cpp
(functionsModule.cpp określa potrzebną funkcję):
g++ -o binName main.o functionsModule.o
błąd krytyczny: ***: Brak takiego pliku lub katalogu
Kompilator nie może znaleźć pliku (plik źródłowy używa #include "someFile.hpp"
).
qmake:
INCLUDEPATH += dir/Of/File
cmake:
include_directories(dir/Of/File)
wywołanie g ++:
g++ -o main main.cpp -Idir/Of/File