関数本体または変数の未定義

関数プロトタイプだけを使用すると、コンパイラはエラーを発生させずに続行できますが、関数コードまたは変数空間が予約されていないため、リンカーはアドレスの呼び出しを解決できません。 このエラーは、リンカーが解決しなければならない関数の呼び出しを作成するまで表示されません。

例: 未定義関数の呼び出し

main での関数呼び出しによって LNK2019 が発生します。プロトタイプでは、コンパイラが関数の存在を想定しているからです。 リンカーは、それがないことを検出します。

// LNK2019_MFBV.cpp
// LNK2019 expected
void DoSomething(void);
int main() {
   DoSomething();
}

例: 実装された関数の呼び出し

C++ では、クラス定義のプロトタイプだけでなく、クラスの特定の関数の実装を含めるようにしてください。 ヘッダー ファイルの外部でクラスを定義する場合は、関数の前にクラス名を含めるようにしてください (Classname::memberfunction)。

// LNK2019_MFBV_2.cpp
// LNK2019 expected
struct A {
   static void Test();
};

// Should be void A::Test() {}
void Test() {}

int main() {
   A AObject;
   AObject.Test();
}

関連項目

リンカー ツール エラー LNK2019