Delen via


Compilerfout C3861

'id': id is niet gevonden

Opmerkingen

De compiler kan een verwijzing naar een id niet oplossen, zelfs niet met behulp van argumentafhankelijke zoekactie.

Als u deze fout wilt oplossen, vergelijkt u het gebruik van identifier met de identifier-declaratie op hoofdlettergebruik en spelling. Controleer of operators voor bereikomzetting en naamruimte-instructies using correct worden gebruikt. Als de id is gedeclareerd in een headerbestand, controleert u of de header is opgenomen voordat naar de id wordt verwezen. Als de id extern zichtbaar is, moet u ervoor zorgen dat deze is gedeclareerd in een bronbestand dat deze gebruikt. Controleer ook of de id-declaratie of -definitie niet wordt uitgesloten door voorwaardelijke compilatierichtlijnen.

Wijzigingen in het verwijderen van verouderde functies uit de C Runtime-bibliotheek in Visual Studio 2015 kunnen C3861 veroorzaken. Als u deze fout wilt oplossen, verwijdert u verwijzingen naar deze functies of vervangt u deze door hun veilige alternatieven, indien van toepassing. Zie Verouderde functies voor meer informatie.

Als fout C3861 wordt weergegeven na de projectmigratie van oudere versies van de compiler, hebt u mogelijk problemen met betrekking tot ondersteunde Windows-versies. Visual C++ biedt geen ondersteuning meer voor Windows 95, Windows 98, Windows ME, Windows NT of Windows 2000. Als uw WINVER of _WIN32_WINNT macro's zijn toegewezen aan een van deze versies van Windows, moet u de macro's wijzigen. Voor meer informatie, zie Wijzigen WINVER en _WIN32_WINNT.

Voorbeelden

Niet-gedefinieerde id

In het volgende voorbeeld wordt C3861 gegenereerd omdat de id niet is gedefinieerd.

// C3861.cpp
void f2(){}
int main() {
   f();    // C3861
   f2();   // OK
}

Identificator niet binnen bereik

In het volgende voorbeeld wordt C3861 gegenereerd, omdat een id alleen zichtbaar is in het bestandsbereik van de definitie, tenzij deze is gedeclareerd in andere bronbestanden die deze gebruiken.

Bronbestand 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
}

Bronbestand C3861_a2.cpp:

// C3861_a2.cpp
int f() {  // declared and defined here
   return 42;
}

Vereiste kwalificatie van de naamruimte

Uitzonderingsklassen in de standaardbibliotheek van C++ vereisen de std naamruimte.

// 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;
   }
}

Verouderde functie aangeroepen

Verouderde functies zijn verwijderd uit de CRT-bibliotheek.

// 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-functies en vriendfuncties

In het volgende voorbeeld wordt C3861 gegenereerd omdat de compiler geen argumentafhankelijke zoekactie kan gebruiken voor 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
}

Als u de fout wilt oplossen, declareert u de vriend in het klassebereik en definieert u deze in naamruimtebereik:

class MyClass {
   int m_private;
   friend void func();
};

void func() {
   MyClass s;
   s.m_private = 0;
}

int main() {
   func();
}