C++ cli 数组在函数中分配
我在函数中分配cli::array时遇到问题 我有这样的目标:C++ cli 数组在函数中分配,c++-cli,C++ Cli,我在函数中分配cli::array时遇到问题 我有这样的目标: array<double>^ tmsr2; array^tmsr2; 现在我想在函数中分配它,以便: void allocate(array<double>^ tmsr2) { tmsr2=gcnew array<double>(100); } void分配(数组^tmsr2) { tmsr2=新阵列(100); } 现在,函数中的tmsr2分配得很好,但返回main()时,我丢失
array<double>^ tmsr2;
array^tmsr2;
现在我想在函数中分配它,以便:
void allocate(array<double>^ tmsr2)
{
tmsr2=gcnew array<double>(100);
}
void分配(数组^tmsr2)
{
tmsr2=新阵列(100);
}
现在,函数中的tmsr2分配得很好,但返回main()时,我丢失了指针
问题对我来说很清楚,就像我想分配简单数组“double*a”;我需要将指针传递给函数so“&a”,然后一切正常。我只是不知道托管数组的语法。非常感谢你的帮助
Peter您可以将数组作为引用传递:
void allocate(array<double>^ &tmsr2)
{
tmsr2=gcnew array<double>(100);
}
void分配(数组^&tmsr2)
{
tmsr2=新阵列(100);
}
您可以将数组作为引用传递:
void allocate(array<double>^ &tmsr2)
{
tmsr2=gcnew array<double>(100);
}
void分配(数组^&tmsr2)
{
tmsr2=新阵列(100);
}
由于数组
是托管类型,因此您可以在此处使用托管跟踪引用,而不是普通引用
void allocate(array<double>^% tmsr2)
{
tmsr2 = gcnew array<double>(100);
}
void分配(数组^%tmsr2)
{
tmsr2=新阵列(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;
}
public ref类AsAClassField
{
公众:
数组^b;
AsAClassField()
{
分配(b);
调试::WriteLine(“b=“+(b!=nullptr?”数组):“null”);
}
};
int main(数组^args)
{
数组^a=nullptr;
分配(a);
调试::WriteLine(“a=“+(a!=nullptr?”数组):“null”);
AsAClassField^foo=gcnew AsAClassField();
返回0;
}
输出:
a = array
b = array
a=数组
b=阵列
当然,您可以随时切换分配函数以返回新分配的数组,而不是将其作为引用。这将更多地采用托管样式。由于
数组
是托管类型,因此您可以在此处使用托管跟踪引用,而不是普通引用
void allocate(array<double>^% tmsr2)
{
tmsr2 = gcnew array<double>(100);
}
void分配(数组^%tmsr2)
{
tmsr2=新阵列(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;
}
public ref类AsAClassField
{
公众:
数组^b;
AsAClassField()
{
分配(b);
调试::WriteLine(“b=“+(b!=nullptr?”数组):“null”);
}
};
int main(数组^args)
{
数组^a=nullptr;
分配(a);
调试::WriteLine(“a=“+(a!=nullptr?”数组):“null”);
AsAClassField^foo=gcnew AsAClassField();
返回0;
}
输出:
a = array
b = array
a=数组
b=阵列
当然,您可以随时切换分配函数以返回新分配的数组,而不是将其作为引用。这将更符合托管风格。OK,还有一个问题,您的解决方案总体上运行良好,但当我将tmsr声明为windows窗体公共变量并希望在构造函数的函数中分配它时,它会给出“无法将参数2从'cli::array^'转换为'cli::array^&”错误,有任何建议吗,还有一个问题,您的解决方案总体上运行良好,但当我将tmsr声明为windows窗体公共变量并希望在构造函数的函数中分配它时,它会给出“无法将参数2从'cli::array^'转换为'cli::array^&”错误,有任何建议吗?