私の前の質問からのフォローアップ。
次のコードがエラーなしでコンパイルされる理由を誰かが説明できますか?
typedef array<VdbMethodInfo^> MethodArray;
typedef array<VdbParameterInfo^> ParameterArray;
ParameterArray^ parameters = gcnew ParameterArray {
gcnew VdbParameterInfo("name", "string", "Paul")};
MethodArray^ methods = gcnew MethodArray {
gcnew VdbMethodInfo("createTable", parameters)
};
しかし、これにより、「エラーC2440:'初期化中':'VdbParameterInfo^'から'VdbMethodInfo^'に変換できません」というメッセージが表示されます。
typedef array<VdbMethodInfo^> MethodArray;
typedef array<VdbParameterInfo^> ParameterArray;
MethodArray^ methods = gcnew MethodArray {
gcnew VdbMethodInfo("createTable", gcnew ParameterArray {
gcnew VdbParameterInfo("name", "string", "Paul")};
)
};
私が行ったのは、メソッド配列の初期化内にパラメーター配列を「ネスト」しようとすることだけです...直接気にしないでください-VdbMethodInfoのコンストラクターは、2番目の引数としてParameterArrayを取ります。
マネージC++配列の初期化では、再帰的なネストが同じタイプであることが想定されているようです...(つまり、これはバグであるに違いないと思います)
関連する質問:ここ