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


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

невозможно вывести тип для "типа1" из "типа2"

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

Чтобы исправить эту ошибку

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

  2. Убедитесь, что объявление не является указателем на основной тип.Дополнительные сведения см. в разделе Принцип типа (C++).

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

Пример

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

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

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

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

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

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

См. также

Ссылки

автоматическое ключевое слово

Принцип типа (C++)