サーチ…


エラー: '***'はこのスコープで宣言されていません

このエラーは、不明なオブジェクトが使用されている場合に発生します。

変数

コンパイルしない:

#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