Erreur du compilateur C3535
impossible de déduire le type de 'type1' à partir de 'type2'
Le type de la variable déclarée par le auto
mot clé ne peut pas être déduit du type de l’expression d’initialisation. Par exemple, cette erreur se produit si l’expression d’initialisation prend void
la valeur , ce qui n’est pas un type.
Pour corriger cette erreur
Vérifiez que le type de l’expression d’initialisation n’est pas
void
.Vérifiez que la déclaration n’est pas un pointeur vers un type fondamental. Pour plus d’informations, consultez Types fondamentaux.
Vérifiez que si la déclaration est un pointeur vers un type, l’expression d’initialisation est un type de pointeur.
Exemples
L’exemple suivant génère l’erreur C3535, car l’expression d’initialisation est évaluée à void
.
// C3535a.cpp
// Compile with /Zc:auto
void f(){}
int main()
{
auto x = f(); //C3535
return 0;
}
L’exemple suivant génère l’erreur C3535, car l’instruction déclare une variable x
en tant que pointeur vers un type déduit, mais le type de l’expression 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 génère l’erreur C3535, car la variable p
déclare un pointeur vers un type déduit, mais l’expression d’initialisation n’est pas un type de pointeur.
// C3535c.cpp
// Compile with /Zc:auto
class A { };
A x;
auto *p = x; // C3535