C++
Veelvoorkomende compileer- / linkerfouten (GCC)
Zoeken…
fout: '***' is niet opgegeven in deze scope
Deze fout treedt op als een onbekend object wordt gebruikt.
Variabelen
Niet compileren:
#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;
}
fix:
#include <iostream>
int main(int argc, char *argv[])
{
{
int i = 2;
std::cout << i << std::endl;
}
return 0;
}
functies
Meestal treedt deze fout op als de benodigde header niet is opgenomen (bijvoorbeeld het gebruik van
std::cout
zonder#include <iostream>
)
Niet compileren:
#include <iostream>
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
fix:
#include <iostream>
void doCompile(); // forward declare the function
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
Of:
#include <iostream>
void doCompile() // define the function before using it
{
std::cout << "No!" << std::endl;
}
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
Opmerking: De compiler interpreteert de code van boven naar beneden (vereenvoudiging). Alles moet minimaal worden aangegeven (of gedefinieerd) voor gebruik.
ongedefinieerde verwijzing naar `*** '
Deze linkerfout treedt op als de linker geen gebruikt symbool kan vinden. Meestal gebeurt dit als een gebruikte bibliotheek niet is gekoppeld.
qmake:
LIBS += nameOfLib
cmake:
TARGET_LINK_LIBRARIES(target nameOfLib)
g ++ oproep:
g++ -o main main.cpp -Llibrary/dir -lnameOfLib
Je zou ook kunnen vergeten om alle gebruikte .cpp
bestanden te compileren en te koppelen (functiesModule.cpp definieert de benodigde functie):
g++ -o binName main.o functionsModule.o
fatale fout: ***: bestand of map bestaat niet
De compiler kan een bestand niet vinden (een bronbestand gebruikt #include "someFile.hpp"
).
qmake:
INCLUDEPATH += dir/Of/File
cmake:
include_directories(dir/Of/File)
g ++ oproep:
g++ -o main main.cpp -Idir/Of/File