编译器错误 C3535

无法从“type2”推断“type1”的类型

无法从初始化表达式的类型推断关键字 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 关键字
基本类型