コンパイラ エラー C3535

'type2' から 'type1' の型を推測できません

auto キーワードによって宣言された変数の型は、初期化式の型から推測できません。 たとえば、初期化式が型ではない void と評価された場合、このエラーが発生します。

このエラーを解決するには

  1. 初期化式の型が void ではないことを確認します。

  2. 宣言が基本型へのポインターではないことを確認します。 詳細については、基本型に関するページを参照してください。

  3. 宣言が型へのポインターである場合は、初期化式がポインター型であることを確認します。

次の例では、初期化式が void と評価されたため、C3535 が生成されます。

// 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 は、推測された型へのポインターを宣言しますが、初期化式はポインター型ではないからです。

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

関連項目

auto キーワード
基本的な型