関数本体または変数の未定義
更新 : 2007 年 11 月
関数のプロトタイプしか与えていない場合でも、エラーなしでコンパイルを継続できます。ただし、実際の関数コードや変数領域が予約されていないので、リンカは呼び出しのアドレスを解決できません。リンカが関数呼び出しを解決し、生成するまで、このエラーは発生しません。
使用例
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();
}