1

関数に cli::array を割り当てる際に問題が発生しました。

私はこの種のオブジェクトを持っています:

array<double>^ tmsr2;

今、私はそれを関数に割り当てたいので:

void allocate(array<double>^ tmsr2)
{
    tmsr2=gcnew array<double>(100);
}

これで、関数内の tmsr2 は適切に割り当てられますが、main() に戻るときにポインターが失われます。単純な配列 "double *a"; を割り当てたい場合と同様に、問題は明らかです。関数へのポインターを渡す必要があるため、「&a」を使用すると、すべてが正常に機能します。管理された配列の構文がわかりません。大変助かりました。

ピーター

4

2 に答える 2

2

配列を参照として渡すことができます。

void allocate(array<double>^ &tmsr2)
{
    tmsr2=gcnew array<double>(100);
}
于 2012-10-04T10:17:07.707 に答える
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 = 配列
b = 配列

もちろん、常に割り当て関数を切り替えて、参照として取得するのではなく、新しく割り当てられた配列を返すことができます。それはより管理されたスタイルになります。

于 2012-10-04T18:17:23.893 に答える