Udostępnij za pośrednictwem


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 voidwartość , która nie jest typem.

Aby poprawić ten błąd

  1. Upewnij się, że typ wyrażenia inicjalizacji to nie void.

  2. Upewnij się, że deklaracja nie jest wskaźnikiem do typu podstawowego. Aby uzyskać więcej informacji, zobacz Podstawowe typy.

  3. 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

Zobacz też

Auto, słowo kluczowe
Typy podstawowe