Является ли FrequencyDataSet
нативным типом, используемым какой-то библиотекой, которую вы используете?
Если нет, то укажите System::Collections::Generic::List<FrequencyDataSet> storedModels
, как предложил Сева.
Если это так,нужна нативная коллекция для управления вашими нативными типами, и std::vector
- хороший выбор.Но std::vector
не может быть непосредственно внутри вашего Form
, поскольку сборщик мусора .NET переместит ваши экземпляры Form
в компактную память.Поэтому вам нужно поместить вектор туда, где он не будет двигаться.Одним из вариантов является настоящая глобальная переменная:
В вашем заголовочном файле:
extern std::vector<FrequencyDataSet> g_storedModels;
и в одном файле .cpp:
std::vector<FrequencyDataSet> g_storedModels;
Однако, если вам это нужноСкопируйте для каждого экземпляра вашей формы или другого класса, вам нужно использовать динамическое выделение из собственной кучи (которая не будет перемещаться) и сохранить указатель.Это будет работать (внутри вашего ref class MyForm
или как вы его называете):
std::vector<FrequencyDataSet>* storedModels;
MyForm() : storedModels(new std::vector<FrequencyDataSet>())
{
/* the rest of your constructor... InitializeComponents and so forth */
}
Но этот вектор не управляется сборщиком мусора, теперь вам нужно помнить, чтобы освободить его, когда ваш Form
уничтожено.Умный указатель поможет с этим.
clr_scoped_ptr<std::vector<FrequencyDataSet>> storedModels;
MyForm() : storedModels(new std::vector<FrequencyDataSet>())
{
/* the rest of your constructor... InitializeComponents and so forth */
}
Смотрите здесь для моего clr_scoped_ptr
, который вы можете использовать, если вы будете соблюдать лицензию в комментариях.Или вы можете изучить его, чтобы научиться писать самостоятельно.