Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Messaggio di errore
errore di sintassi: 'token' mancante prima dell'identificatore 'identificatore'
syntax error : missing 'token' before identifier 'identifier'
È stato rilevato identifier mentre era previsto token. Possibili cause:
Errore di ortografia o di utilizzo delle maiuscole/minuscole.
Identificatore del tipo mancante nella dichiarazione dell'identificatore.
L'errore può essere causato da un errore di digitazione. Questo errore è in genere preceduto dall'errore C2065.
Esempio
Nell'esempio seguente viene generato l'errore 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'
}
Questo errore può anche venire generato come risultato delle operazioni di conformità eseguite per Visual Studio .NET 2003: parola chiave typename mancante. Per ulteriori informazioni, vedere Riepilogo delle ultime modifiche in fase di compilazione.
L'esempio riportato di seguito viene compilato in Visual Studio .NET, ma non funziona in 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() { }
Questo errore può anche venire generato come risultato delle operazioni di conformità eseguite per Visual Studio .NET 2003: le specializzazioni esplicite non trovano più i parametri di template dal template primario.
L'utilizzo di T dal modello principale non è consentito nella specializzazione esplicita. Affinché il codice sia valido nelle versioni Visual Studio .NET 2003 e Visual Studio .NET di Visual C++, sostituire tutte le istanze del parametro di template nella specializzazione con il tipo specializzato esplicitamente.
Per ulteriori informazioni, vedere Riepilogo delle ultime modifiche in fase di compilazione.
Il seguente esempio viene compilato in Visual Studio .NET ma non funziona in 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
};