Aracılığıyla paylaş


Derleyici Hatası C3861

'identifier': tanımlayıcı bulunamadı

Derleyici, bağımsız değişkene bağımlı arama kullanarak bile bir tanımlayıcıya başvuruyu çözümleyemedi.

Açıklamalar

Bu hatayı düzeltmek için tanımlayıcı kullanımını büyük/küçük harf ve yazım denetimi tanımlayıcı bildirimiyle karşılaştırın. Kapsam çözümleme işleçlerininve ad alanıusingyönergelerinin doğru kullanıldığını doğrulayın. Tanımlayıcı bir üst bilgi dosyasında bildirilirse, tanımlayıcıya başvurulmadan önce üst bilginin eklendiğini doğrulayın. Tanımlayıcının dışarıdan görünür olması amaçlanıyorsa, bunu kullanan herhangi bir kaynak dosyada bildirildiğinden emin olun. Ayrıca tanımlayıcı bildiriminin veya tanımının koşullu derleme yönergeleri tarafından dışlanmadığını denetleyin.

Visual Studio 2015'teki C Çalışma Zamanı Kitaplığı'ndan eski işlevleri kaldırma değişiklikleri C3861'e neden olabilir. Bu hatayı çözmek için, bu işlevlere yönelik başvuruları kaldırın veya varsa bunları güvenli alternatifleriyle değiştirin. Daha fazla bilgi için bkz . Eski işlevler.

Derleyicinin eski sürümlerinden proje geçişi sonrasında C3861 hatası görüntülenirse desteklenen Windows sürümleriyle ilgili sorunlarla karşılaşabilirsiniz. Visual C++ artık Windows 95, Windows 98, Windows ME, Windows NT veya Windows 2000'i hedeflemeyi desteklemiyor. veya _WIN32_WINNT makrolarınız WINVER bu Windows sürümlerinden birine atanmışsa, makroları değiştirmeniz gerekir. Daha fazla bilgi için, bkz . WINVER Değiştirme ve _WIN32_WINNT.

Örnekler

Tanımlanmamış tanımlayıcı

Tanımlayıcı tanımlanmadığından aşağıdaki örnek C3861 oluşturur.

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

Tanımlayıcı kapsamda değil

Aşağıdaki örnek C3861 oluşturur çünkü tanımlayıcı, onu kullanan diğer kaynak dosyalarda bildirilmediği sürece yalnızca tanımının dosya kapsamında görünür.

Kaynak dosya 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
}

Kaynak dosya C3861_a2.cpp:

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

Ad alanı niteliği gerekli

C++ Standart Kitaplığı'ndaki özel durum sınıfları ad alanını std gerektirir.

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

Çağrılan eski işlev

Eski işlevler CRT kitaplığından kaldırıldı.

// 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 ve arkadaş işlevleri

Derleyici için FriendFuncbağımsız değişkene bağımlı aramayı kullanamadığından aşağıdaki örnek C3767 oluşturur:

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
}

Hatayı düzeltmek için arkadaşı sınıf kapsamında bildirin ve ad alanı kapsamında tanımlayın:

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

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

int main() {
   func();
}