Более того, у вас необъявленная переменная i =)
Допустим, вы ошиблись, выпиливая лишний код, пусть эта переменная вычисляется у вас в рантайме (т.е. она не являтся константой). Внутри метода вы пытаетесь создать массив
на стеке. Для этого компилятору важно знать заранее (в compile-time), какой буфер там резервировать, т.е. необходима константа или константное выражение, о чем и сказано в сообщении об ошибке.
А как же C#?Но в С# же это было не обязательно, что же нам ответит на это Рихтер?Базовым для всех массивов является абстрактный класс System.Array
, производный от System.Object
. Значит, массивы всегда относятся к ссылочному типу и размещаются в управляемой куче, а переменная в приложении содержит не элементы массива, а ссылку на массив.
В вашем же случае нужна конструкция вроде:
array< PARAM_BYNAME_DATA^ >^ rgprmbd
= gcnew array< PARAM_BYNAME_DATA^ >(i);