Erreur du compilateur C2061
erreur de syntaxe : identificateur 'identificateur'
Le compilateur a trouvé un identificateur où il n’était pas attendu. Assurez-vous qu’il identifier
est déclaré avant de l’utiliser.
Un initialiseur peut être placé entre parenthèses. Pour éviter ce problème, placez le déclarateur entre parenthèses ou faites-en un typedef
.
Cette erreur peut également être provoquée lorsque le compilateur détecte une expression en tant qu’argument de modèle de classe ; utilisez typename pour indiquer au compilateur qu’il s’agit d’un type, comme illustré dans l’exemple suivant :
L’exemple suivant génère l’erreur C2061 :
// C2061.cpp
// compile with: /std:c++17
template <A a> // C2061
class C1 {};
template <typename A a> // ok
class C2 {};
template <typename T>
class C3
{
// Both are valid since C++20
using Type1 = T::Type; // C2061
using Type2 = typename T::Type; // OK
};
int main()
{
int x;
unsigned a1 = alignof(x); // C2061
unsigned a2 = alignof(int); // OK
unsigned a3 = alignof(decltype(x)); // OK
}
Pour résoudre l’erreur avec template<A a> class C1{};
, utilisez template <typename a> class C1 {};
Pour résoudre le problème avec using Type1 = T::Type;
, utilisez using Type1 = typename T::Type;
Pour résoudre le problème avec alignof(x)
, remplacez l’argument par le type de x
. Dans ce cas, int
ou decltype(x);
C2061 peut se produire si vous passez un nom d’instance à typeid :
// C2061b.cpp
// compile with: /clr
ref struct G
{
int i;
};
int main()
{
G ^pG = gcnew G;
System::Type ^ pType = typeid<pG>; // C2061
System::Type ^ pType2 = typeid<G>; // OK
}
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour