Megosztás a következőn keresztül:


C3861 fordítási hiba

"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();
}