Partager via


Erreur du compilateur C3535

impossible de déduire le type pour « type1 » à partir de « type2 »

Le type de la variable déclarée par le mot clé auto ne peut pas être déduit du type de l'expression d'initialisation.Par exemple, cette erreur se produit si l'expression d'initialisation a la valeur void, ce qui n'est pas un type.

Pour corriger cette erreur

  1. Vérifiez que le type de l'expression d'initialisation n'est pas void.

  2. Vérifiez que la déclaration n'est pas un pointeur vers un type fondamental.Pour plus d'informations, consultez Types fondamentaux (C++).

  3. Vérifiez que si la déclaration est un pointeur vers un type, l'expression d'initialisation est un type pointeur.

Exemple

L'exemple suivant donne C3535 parce que l'expression d'initialisation a la valeur void.

// C3535a.cpp
// Compile with /Zc:auto
void f(){}
int main()
{
   auto x = f();   //C3535
   return 0;
}

L'exemple suivant donne C3535 parce que l'instruction déclare la variable x comme un pointeur vers un type déduit, mais le type de l'expression d'initialiseur est double.Par conséquent, le compilateur ne peut pas déduire le type de la variable.

// C3535b.cpp
// Compile with /Zc:auto
int main()
{
   auto* x = 123.0;   // C3535
   return 0;
}

L'exemple suivant donne C3535 parce que la variable p déclare un pointeur vers un type déduit, mais l'expression d'initialisation n'est pas un type pointeur.

// C3535c.cpp
// Compile with /Zc:auto
class A { };
A x;
auto *p = x;  // C3535

Voir aussi

Référence

mot clé automatique

Types fondamentaux (C++)