Chyba kompilátoru C3861
Identifikátor: identifikátor nebyl nalezen.
Kompilátor nemohl přeložit odkaz na identifikátor, a to ani pomocí vyhledávání závislého na argumentu.
Poznámky
Pokud chcete tuto chybu opravit, porovnejte použití identifikátoru s deklarací identifikátoru pro velká a pravopisná písmena. Ověřte, že se správně používají operátory překladu oborů a direktivy oboru názvůusing
. Pokud je identifikátor deklarován v souboru hlavičky, před odkazem na tento identifikátor ověřte, zda je hlavička zahrnuta. Pokud má být identifikátor externě viditelný, ujistěte se, že je deklarován v libovolném zdrojovém souboru, který ho používá. Zkontrolujte také, že deklarace identifikátoru nebo definice nejsou vyloučené direktivou podmíněné kompilace.
Změny odebrání zastaralých funkcí z knihovny modulu runtime C v sadě Visual Studio 2015 můžou způsobit C3861. Pokud chcete tuto chybu vyřešit, odeberte odkazy na tyto funkce nebo je nahraďte jejich zabezpečenými alternativami, pokud existují. Další informace naleznete v tématu Zastaralé funkce.
Pokud se po migraci projektu ze starších verzí kompilátoru zobrazí chyba C3861, může dojít k problémům souvisejícím s podporovanými verzemi Windows. Visual C++ už nepodporuje cílení na Windows 95, Windows 98, Windows ME, systém Windows NT nebo Windows 2000. Pokud jsou vaše WINVER
makra _WIN32_WINNT
přiřazená k některé z těchto verzí Windows, musíte makra upravit. Další informace naleznete v tématu Úpravy WINVER
a _WIN32_WINNT
.
Příklady
Nedefinovaný identifikátor
Následující ukázka vygeneruje C3861, protože identifikátor není definován.
// C3861.cpp
void f2(){}
int main() {
f(); // C3861
f2(); // OK
}
Identifikátor není v oboru
Následující ukázka generuje C3861, protože identifikátor je viditelný pouze v oboru souboru jeho definice, pokud není deklarován v jiných zdrojových souborech, které ho používají.
Zdrojový soubor 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
}
Zdrojový soubor C3861_a2.cpp
:
// C3861_a2.cpp
int f() { // declared and defined here
return 42;
}
Požadovaná kvalifikace oboru názvů
Třídy výjimek ve standardní knihovně jazyka C++ vyžadují std
obor názvů.
// 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;
}
}
Zastaralá funkce s názvem
Zastaralé funkce byly odebrány z knihovny 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 a přátelské funkce
Následující ukázka vygeneruje C3767, protože kompilátor nemůže použít vyhledávání závislé na argumentech pro 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
}
Pokud chcete chybu opravit, deklarujte přítele v oboru třídy a definujte ho v oboru názvů:
class MyClass {
int m_private;
friend void func();
};
void func() {
MyClass s;
s.m_private = 0;
}
int main() {
func();
}