Sdílet prostřednictvím


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