Compilador erro C2146
Mensagem de erro
Erro de sintaxe: faltando token antes de identificador 'identificador'
O compilador esperado token e encontrado identifier em vez disso. Possíveis causas:
Erro de ortografia ou uso de maiúsculas e minúsculas.
Especificador de tipo ausentes na declaração do identificador.
Este erro pode ser causado por um erro tipográfico.Erro C2065 precede geralmente este erro.
Exemplo
O exemplo a seguir gera C2146.
// C2146.cpp
class CDeclaredClass {};
class CMyClass {
CUndeclared m_myClass; // C2146
CDeclaredClass m_myClass2; // OK
};
int main() {
int x;
int t x; // C2146 : missing semicolon before 'x'
}
Este erro também pode ser gerado sistema autônomo resultado do trabalho de conformidade de compilador que foi concluído para o Visual Studio .NET 2003: faltando typename palavra-chave. See Resumo das alterações de quebras de time de compilar para obter mais informações.
O exemplo a seguir é compilado no Visual Studio .NET 2002, mas haverá falha no Visual Studio .NET 2003:
// C2146b.cpp
// compile with: /c
template <typename T>
struct X {
struct Y {
int i;
};
Y memFunc();
};
template <typename T>
X<T>::Y func() { } // C2146
// OK
template <typename T>
typename X<T>::Y func() { }
Você também verá esse erro de compilador conformidade trabalho que foi concluído para o Visual Studio .NET 2003: especializações explícita em não mais localizar os parâmetros de modelo do modelo principal.
O uso de T do modelo principal não é permitido na especialização explícita. Para código de ser válido nas versões do Visual C++ Visual Studio .NET 2003 e o Visual Studio. NET, substitua todas as ocorrências do parâmetro do modelo a especialização com o tipo explicitamente especializado.
Consulte o resumo de time de compilar separável alterações para obter mais informações.
O exemplo a seguir é compilado no Visual Studio. NET, mas haverá falha no Visual Studio .NET 2003:
// C2146_c.cpp
// compile with: /c
template <class T>
struct S;
template <>
struct S<int> {
T m_t; // C2146
int m_t2; // OK
};