컴파일러 오류 C3861
'identifier': 식별자를 찾을 수 없습니다.
컴파일러가 인수 종속 조회를 사용하더라도 식별자에 대한 참조를 확인할 수 없습니다.
설명
이 오류를 해결하려면 식별자 사용을 대/소문자 및 맞춤법 검사에 대한 식별자 선언과 비교합니다. 범위 확인 연산자 및 네임스페이스 using
지시문이 올바르게 사용되는지 확인합니다. 식별자가 헤더 파일에 선언된 경우 식별자를 참조하기 전에 헤더가 포함되어 있는지 확인합니다. 식별자가 외부에 표시되도록 되어 있는 경우 식별자를 사용하는 모든 원본 파일에 선언되어 있는지 확인합니다. 또한 식별자 선언 또는 정의가 조건부 컴파일 지시문에서 제외되지 않는지 확인합니다.
Visual Studio 2015의 C 런타임 라이브러리에서 사용되지 않는 함수를 제거하도록 변경하면 C3861이 발생할 수 있습니다. 이 오류를 해결하려면 이러한 함수에 대한 참조를 제거하거나 보안 대안(있는 경우)으로 대체합니다. 자세한 내용은 사용되지 않는 함수를 참조 하세요.
이전 버전의 컴파일러에서 프로젝트를 마이그레이션한 후 C3861 오류가 표시되면 지원되는 Windows 버전과 관련된 문제가 있을 수 있습니다. Visual C++에서는 더 이상 Windows 95, Windows 98, Windows ME, Windows NT 또는 Windows 2000을 대상으로 지정할 수 없습니다. 사용자 WINVER
또는 _WIN32_WINNT
매크로가 이러한 Windows 버전 중 하나에 할당된 경우 매크로를 수정해야 합니다. 자세한 내용은 수정 및 _WIN32_WINNT
을 참조하세요WINVER
.
예제
식별자가 정의되지 않았습니다.
다음 샘플에서는 식별자가 정의되지 않았기 때문에 C3861을 생성합니다.
// C3861.cpp
void f2(){}
int main() {
f(); // C3861
f2(); // OK
}
범위에 없는 식별자
다음 샘플에서는 C3861을 생성합니다. 식별자는 해당 정의를 사용하는 다른 원본 파일에 선언되지 않는 한 해당 정의의 파일 범위에만 표시되기 때문입니다.
원본 파일 C3861_a1.cpp
:
// C3861_a1.cpp
// Compile with: cl /EHsc /W4 C3861_a1.cpp C3861_a2.cpp
#include <iostream>
// Uncomment the following line to fix:
// int f(); // declaration makes external function visible
int main() {
std::cout << f() << std::endl; // C3861
}
원본 파일 C3861_a2.cpp
:
// C3861_a2.cpp
int f() { // declared and defined here
return 42;
}
네임스페이스 자격 필요
C++ 표준 라이브러리의 예외 클래스에는 네임스페이스가 std
필요합니다.
// C3861_b.cpp
// compile with: /EHsc
#include <iostream>
int main() {
try {
throw exception("Exception"); // C3861
// try the following line instead
// throw std::exception("Exception");
}
catch (...) {
std::cout << "caught an exception" << std::endl;
}
}
호출된 사용되지 않는 함수
사용되지 않는 함수가 CRT 라이브러리에서 제거되었습니다.
// C3861_c.cpp
#include <stdio.h>
int main() {
char line[21]; // room for 20 chars + '\0'
gets( line ); // C3861
// Use gets_s instead.
printf( "The line entered was: %s\n", line );
}
ADL 및 friend 함수
다음 샘플에서는 컴파일러에서 인수 종속 조회를 사용할 수 없으므로 C3767을 FriendFunc
생성합니다.
namespace N {
class C {
friend void FriendFunc() {}
friend void AnotherFriendFunc(C* c) {}
};
}
int main() {
using namespace N;
FriendFunc(); // C3861 error
C* pC = new C();
AnotherFriendFunc(pC); // found via argument-dependent lookup
}
오류를 해결하려면 클래스 범위에서 friend를 선언하고 네임스페이스 범위에서 정의합니다.
class MyClass {
int m_private;
friend void func();
};
void func() {
MyClass s;
s.m_private = 0;
}
int main() {
func();
}