Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cli 数组在函数中分配_C++ Cli - Fatal编程技术网

C++ cli 数组在函数中分配

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()时,我丢失

我在函数中分配cli::array时遇到问题

我有这样的目标:

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^&”错误,有任何建议吗?