В продолжение моего предыдущего вопроса.
Может кто-нибудь объяснить, почему следующий код компилируется без ошибок:
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 принимает в качестве второго аргумента ParameterArray.
Похоже, это означает, что управляемая инициализация массива C ++ предполагает, что любое рекурсивное вложение имеет один и тот же тип ... (т.е. я думаю, что это должно быть ошибкой)
Смежный вопрос: здесь