Partilhar via


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:

  1. Erro de ortografia ou uso de maiúsculas e minúsculas.

  2. 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
};