Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
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
};