Поделиться через


Ошибка компилятора C3535

Не удается вывести тип для типа "type1" из типа2

Тип переменной, объявленной auto ключевым словом, не может быть выведен из типа выражения инициализации. Например, эта ошибка возникает, если выражение инициализации оценивается voidкак тип.

Исправление ошибки

  1. Убедитесь, что тип выражения инициализации не voidявляется.

  2. Убедитесь, что объявление не является указателем на фундаментальный тип. Дополнительные сведения см. в разделе "Основные типы".

  3. Убедитесь, что если объявление является указателем на тип, выражение инициализации является типом указателя.

Примеры

В следующем примере возвращается C3535, так как выражение инициализации оценивается void.

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

В следующем примере возвращается C3535, так как оператор объявляет переменную x как указатель на выводимый тип, но тип выражения инициализатора является двойным. Следовательно, компилятор не может вывести тип переменной.

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

В следующем примере возвращается C3535, так как переменная p объявляет указатель на выведенный тип, но выражение инициализации не является типом указателя.

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

См. также

Ключевое слово auto
Фундаментальные типы