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ıusing
yö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 FriendFunc
bağı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();
}
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin