コンパイラ エラー C3535
'type2' から 'type1' の型を推測できません
auto
キーワードによって宣言された変数の型は、初期化式の型から推測できません。 たとえば、初期化式が型ではない void
と評価された場合、このエラーが発生します。
このエラーを解決するには
初期化式の型が
void
ではないことを確認します。宣言が基本型へのポインターではないことを確認します。 詳細については、基本型に関するページを参照してください。
宣言が型へのポインターである場合は、初期化式がポインター型であることを確認します。
例
次の例では、初期化式が 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