Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
"azonosító": az azonosító nem található
Megjegyzések
A fordító nem tudta feloldani az azonosítóra mutató hivatkozást, még argumentumfüggő kereséssel sem.
A hiba kijavításához hasonlítsa össze az azonosító használatát az azonosító deklarációjával a kis- és nagybetűk, valamint a helyesírás tekintetében. Ellenőrizze, hogy a hatókörfeloldási operátorok és a névtér-direktívákusing helyesen vannak-e használva. Ha az azonosító egy fejlécfájlban deklarálva van, ellenőrizze, hogy a fejléc szerepel-e az azonosító hivatkozása előtt. Ha az azonosító külsőleg látható, győződjön meg arról, hogy az azt használó forrásfájlban deklarálva van. Ellenőrizze azt is, hogy az azonosító deklarációját vagy definícióját nem zárják-e ki a feltételes fordítási irányelvek.
A Visual Studio 2015 C futtatókörnyezeti kódtárának elavult függvényeinek eltávolítására vonatkozó módosítások C3861-et okozhatnak. A hiba megoldásához távolítsa el a függvényekre mutató hivatkozásokat, vagy cserélje le őket a biztonságos alternatíváikra, ha vannak ilyenek. További információ: Elavult függvények.
Ha A C3861 hiba a fordító régebbi verzióiból való projektmigrálás után jelenik meg, előfordulhat, hogy a támogatott Windows-verziókkal kapcsolatos problémák merülnek fel. A Visual C++ már nem támogatja a Windows 95, a Windows 98, a Windows ME, a Windows NT vagy a Windows 2000 célzását. Ha az Ön WINVER vagy _WIN32_WINNT makrói a Windows ezen verziói egyikéhez vannak hozzárendelve, módosítania kell a makrókat. További információért lásd a(z) WINVER és _WIN32_WINNT módosítását.
Példák
Nem definiált azonosító
Az alábbi példa c3861-et hoz létre, mert az azonosító nincs definiálva.
// C3861.cpp
void f2(){}
int main() {
f(); // C3861
f2(); // OK
}
Az azonosító nem szerepel a hatókörben
Az alábbi példa c3861-et hoz létre, mivel egy azonosító csak a definíció fájlhatókörében látható, kivéve, ha más forrásfájlokban deklarálják azt.
Forrásfájl 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
}
Forrásfájl C3861_a2.cpp:
// C3861_a2.cpp
int f() { // declared and defined here
return 42;
}
Névtér megadása szükséges
A C++ standard kódtár kivételosztályaihoz szükség van a névtérre 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;
}
}
Elavult függvény hívva
Elavult függvények lettek eltávolítva a CRT-kódtárból.
// 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- és barátfunkciók
Az alábbi példa c3861-et hoz létre, mert a fordító nem használhat argumentumfüggő keresési függvényt a következőhöz 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
}
A hiba kijavításához deklarálja a barátot az osztály hatókörében, és definiálja a névtér hatókörében:
class MyClass {
int m_private;
friend void func();
};
void func() {
MyClass s;
s.m_private = 0;
}
int main() {
func();
}