함수 본문 또는 변수 누락
함수 프로토타입만 사용하면 컴파일러가 오류 없이 계속할 수 있지만 예약된 함수 코드 또는 변수 공간이 없으므로 링커는 주소 호출을 확인할 수 없습니다. 링커가 해결해야 하는 함수에 대한 호출을 만들 때까지 이 오류가 표시되지 않습니다.
예: 정의되지 않은 함수 호출
주 함수 호출은 프로토타입을 통해 컴파일러가 함수가 존재한다고 생각할 수 있기 때문에 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();
}