C++
Vanliga kompilering / länkfel (GCC)
Sök…
fel: "***" förklarades inte inom detta område
Det här felet händer om ett okänt objekt används.
variabler
Inte sammanställer:
#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;
}
Fixera:
#include <iostream>
int main(int argc, char *argv[])
{
{
int i = 2;
std::cout << i << std::endl;
}
return 0;
}
funktioner
Oftast uppstår detta fel om den nödvändiga rubriken inte ingår (t.ex. med
std::cout
utan#include <iostream>
)
Inte sammanställer:
#include <iostream>
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
Fixera:
#include <iostream>
void doCompile(); // forward declare the function
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
Eller:
#include <iostream>
void doCompile() // define the function before using it
{
std::cout << "No!" << std::endl;
}
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
Obs: Compilern tolkar koden från topp till botten (förenkling). Allt måste åtminstone deklareras (eller definieras) före användning.
odefinierad hänvisning till `*** '
Det här länkfelet inträffar om länken inte kan hitta en begagnad symbol. Det händer oftast om ett begagnat bibliotek inte är länkat mot.
qmake:
LIBS += nameOfLib
cmake:
TARGET_LINK_LIBRARIES(target nameOfLib)
g ++ samtal:
g++ -o main main.cpp -Llibrary/dir -lnameOfLib
Man kan också glömma att sammanställa och länka alla använda .cpp
filer ( .cpp
definierar den nödvändiga funktionen):
g++ -o binName main.o functionsModule.o
dödligt fel: ***: Ingen sådan fil eller katalog
Kompilatorn kan inte hitta en fil (en källfil använder #include "someFile.hpp"
).
qmake:
INCLUDEPATH += dir/Of/File
cmake:
include_directories(dir/Of/File)
g ++ samtal:
g++ -o main main.cpp -Idir/Of/File