我在函数中分配cli :: array时遇到了问题。
我有这样的对象:
array<double>^ tmsr2;
现在我想在函数中分配它:
void allocate(array<double>^ tmsr2)
{
tmsr2=gcnew array<double>(100);
}
现在,函数中的tmsr2被很好地分配但是在返回main()时我丢失了指针 这个问题对我很清楚,就像我想要分配简单的数组“double * a”一样;我需要将指针传递给函数,因此“&amp; a”然后一切正常。我只是不知道托管数组的语法。非常感谢。
彼得
答案 0 :(得分:2)
您可以将数组作为参考传递:
void allocate(array<double>^ &tmsr2)
{
tmsr2=gcnew array<double>(100);
}
答案 1 :(得分:2)
由于array<double>
是托管类型,因此您可以在此处使用托管跟踪引用,而不是普通引用。
void allocate(array<double>^% tmsr2)
{
tmsr2 = gcnew array<double>(100);
}
这是我的测试应用程序:
public ref class AsAClassField
{
public:
array<double>^ b;
AsAClassField()
{
allocate(b);
Debug::WriteLine("b = " + (b != nullptr ? "array" : "null"));
}
};
int main(array<System::String ^> ^args)
{
array<double>^ a = nullptr;
allocate(a);
Debug::WriteLine("a = " + (a != nullptr ? "array" : "null"));
AsAClassField^ foo = gcnew AsAClassField();
return 0;
}
输出:
a = array b = array
当然,您可以随时切换您的allocate函数以返回新分配的数组,而不是将其作为引用。这将更多地采用托管风格。