Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Chyba syntaxe: Chybí token před identifikátorem identifier
Poznámky
Kompilátor se očekával token a našel identifier místo toho. Možné příčiny:
Chyba pravopisu nebo psaní velkých písmen.
Chybí specifikátor typu v deklaraci identifikátoru.
Příčinou této chyby může být typografická chyba. Chyba C2065 obvykle předchází této chybě.
Příklady
Následující příklad vygeneruje 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'
}
Tuto chybu lze také vygenerovat v důsledku práce kompilátoru, která byla provedena pro Visual Studio .NET 2003: chybí typename klíčové slovo.
Následující příklad se zkompiluje v sadě Visual Studio .NET 2002, ale v sadě Visual Studio .NET 2003 selže:
// 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() { }
Tato chyba se také zobrazí v důsledku práce kompilátoru, která byla provedena pro Visual Studio .NET 2003: Explicitní specializace už nenaleznou parametry šablony z primární šablony.
Použití T z primární šablony není v explicitní specializaci povoleno. Aby byl kód platný v sadě Visual Studio .NET 2003 a Visual Studio .NET, nahraďte všechny instance parametru šablony ve specializaci explicitně specializovaným typem.
Následující příklad se zkompiluje v sadě Visual Studio .NET, ale v sadě Visual Studio .NET 2003 selže:
// C2146_c.cpp
// compile with: /c
template <class T>
struct S;
template <>
struct S<int> {
T m_t; // C2146
int m_t2; // OK
};