Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
syntaxfel: "token" saknas innan identifieraren "identifierare"
Anmärkningar
Kompilatorn förväntade sig token och fann identifier i stället.  Möjliga orsaker:
- Stavnings- eller versalfel. 
- Typspecificerare saknas i identifierarens deklaration. 
Det här felet kan orsakas av ett typografiskt fel. Felet C2065 föregår vanligtvis det här felet.
Exempel
I följande exempel genereras 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'
}
Det här felet kan också genereras som ett resultat av kompilatorns efterlevnadsarbete som utfördes för Visual Studio .NET 2003: nyckelordet saknas typename .
Följande exempel kompileras i Visual Studio .NET 2002 men misslyckas i 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() { }
Du kommer också att se det här felet som ett resultat av kompilatorkonformansarbete som utfördes för Visual Studio .NET 2003: explicita specialiseringar hittar inte längre mallparametrar från den primära mallen.
Användning av T från den primära mallen tillåts inte i den explicita specialiseringen. För att koden ska vara giltig i Visual Studio .NET 2003 och Visual Studio .NET ersätter du alla instanser av mallparametern i specialiseringen med den uttryckligen specialiserade typen.
Följande exempel kompileras i Visual Studio .NET men misslyckas i 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
};