Błąd kompilatora C3535
nie można wyjąć typu "type1" z "type2"
Typ zmiennej zadeklarowanej przez auto
słowo kluczowe nie może być wywoływane z typu wyrażenia inicjalizacji. Na przykład ten błąd występuje, jeśli wyrażenie inicjowania zwróci void
wartość , która nie jest typem.
Aby poprawić ten błąd
Upewnij się, że typ wyrażenia inicjalizacji to nie
void
.Upewnij się, że deklaracja nie jest wskaźnikiem do typu podstawowego. Aby uzyskać więcej informacji, zobacz Podstawowe typy.
Upewnij się, że jeśli deklaracja jest wskaźnikiem typu, wyrażenie inicjowania jest typem wskaźnika.
Przykłady
Poniższy przykład zwraca wartość C3535, ponieważ wyrażenie inicjowania daje wartość void
.
// C3535a.cpp
// Compile with /Zc:auto
void f(){}
int main()
{
auto x = f(); //C3535
return 0;
}
Poniższy przykład zwraca wartość C3535, ponieważ instrukcja deklaruje zmienną x
jako wskaźnik do typu indukowanego, ale typ wyrażenia inicjatora jest podwójny. W związku z tym kompilator nie może wyłudić typu zmiennej.
// C3535b.cpp
// Compile with /Zc:auto
int main()
{
auto* x = 123.0; // C3535
return 0;
}
Poniższy przykład zwraca wartość C3535, ponieważ zmienna p
deklaruje wskaźnik do typu indukowanego, ale wyrażenie inicjowania nie jest typem wskaźnika.
// C3535c.cpp
// Compile with /Zc:auto
class A { };
A x;
auto *p = x; // C3535