C++
一般的なコンパイル/リンカエラー(GCC)
サーチ…
エラー: '***'はこのスコープで宣言されていません
このエラーは、不明なオブジェクトが使用されている場合に発生します。
変数
コンパイルしない:
#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;
}
修正:
#include <iostream>
int main(int argc, char *argv[])
{
{
int i = 2;
std::cout << i << std::endl;
}
return 0;
}
関数
ほとんどの場合、このエラーは必要なヘッダーが含まれていない場合に発生します(例:
#include <iostream>
ないでstd::cout
を使用する)
コンパイルしない:
#include <iostream>
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
修正:
#include <iostream>
void doCompile(); // forward declare the function
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
void doCompile()
{
std::cout << "No!" << std::endl;
}
または:
#include <iostream>
void doCompile() // define the function before using it
{
std::cout << "No!" << std::endl;
}
int main(int argc, char *argv[])
{
doCompile();
return 0;
}
注:コンパイラはコードを上から下に解釈します(簡略化)。使用前に少なくとも宣言(または定義)されていなければなりません。
`*** 'への未定義の参照
このリンカエラーは、リンカが使用済みのシンボルを検出できない場合に発生します。ほとんどの場合、使用されているライブラリがリンクされていない場合に発生します。
qmake:
LIBS += nameOfLib
cmake:
TARGET_LINK_LIBRARIES(target nameOfLib)
g ++呼び出し:
g++ -o main main.cpp -Llibrary/dir -lnameOfLib
また、使用されたすべての.cpp
ファイルをコンパイルしてリンクすることを忘れるかもしれません(functionsModule.cppは必要な関数を定義します)。
g++ -o binName main.o functionsModule.o
致命的なエラー:***:そのようなファイルやディレクトリはありません
コンパイラはファイルを見つけることができません(ソースファイルは#include "someFile.hpp"
使用します)。
qmake:
INCLUDEPATH += dir/Of/File
cmake:
include_directories(dir/Of/File)
g ++呼び出し:
g++ -o main main.cpp -Idir/Of/File
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow