Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
'identificador': identificador não encontrado
Observações
O compilador não conseguiu resolver uma referência a um identificador, mesmo usando pesquisa dependente de argumento.
Para corrigir este erro, compare o uso do identificador com a declaração do identificador em termos de maiúsculas, minúsculas e ortografia. Verifique se os operadores de resolução de escopo e as diretivas de namespaceusing são usados corretamente. Se o identificador for declarado em um arquivo de cabeçalho, verifique se o cabeçalho está incluído antes que o identificador seja referenciado. Se o identificador se destinar a ser visível externamente, certifique-se de que está declarado em qualquer ficheiro de origem que o utilize. Verifique também se a declaração ou definição de identificador não está excluída por diretivas de compilação condicional.
Alterações para remover funções obsoletas da Biblioteca de Tempo de Execução em C no Visual Studio 2015 podem causar o erro C3861. Para resolver esse erro, remova as referências a essas funções ou substitua-as por suas alternativas seguras, se houver. Para obter mais informações, consulte Funções obsoletas.
Se o erro C3861 aparecer após a migração do projeto de versões mais antigas do compilador, você pode ter problemas relacionados às versões suportadas do Windows. Visual C++ não suporta mais direcionamento para Windows 95, Windows 98, Windows ME, Windows NT ou Windows 2000. Se as macros WINVER ou _WIN32_WINNT estiverem atribuídas a uma destas versões do Windows, tem de modificar as macros. Para obter mais informações, consulte Modificando WINVER e _WIN32_WINNT.
Exemplos
Identificador indefinido
O exemplo a seguir gera C3861 porque o identificador não está definido.
// C3861.cpp
void f2(){}
int main() {
f(); // C3861
f2(); // OK
}
Identificador fora de escopo
O exemplo a seguir gera C3861, porque um identificador só é visível no escopo do arquivo de sua definição, a menos que seja declarado em outros arquivos de origem que o usam.
Ficheiro de origem 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
}
Ficheiro de origem C3861_a2.cpp
// C3861_a2.cpp
int f() { // declared and defined here
return 42;
}
Qualificação de namespace necessária
As classes de exceção na Biblioteca Padrão do C++ exigem o std namespace.
// 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;
}
}
Função obsoleta chamada
Funções obsoletas foram removidas da biblioteca 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 );
}
Funções ADL e funções amigas
O exemplo a seguir gera C3861 porque o compilador não pode usar pesquisa dependente de argumento para 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
}
Para corrigir o erro, declare o amigo no escopo da classe e defina-o no escopo do namespace:
class MyClass {
int m_private;
friend void func();
};
void func() {
MyClass s;
s.m_private = 0;
}
int main() {
func();
}