2

「unsigned int *&引数を取得する関数があります。コードで転送したいパラメーターは、次の場所にあります。std::vector<unsigned int> data だから、私がすることは次のとおりです。次のパラメーターを転送します&data [0]しかし、コンパイルエラーが発生します。

unsigned int *' to 'unsigned int *&

回避策は何ですか?ありがとう、

4

4 に答える 4

6

&data[0]右辺値であり、非 const 参照にバインドできません。

次の方法で機能させることができます。

unsigned int *ptr = &data[0];
func(ptr);

ただし、関数のシグネチャを次のように変更する方がよい場合があります。

void foo(unsigned int &val); //or any other return type

ポインターを別の場所に向けたい場合に備えて、ポインターへの参照を渡す感覚があります。しかし、あなたの場合、そうする理由がわかりません

于 2012-08-15T12:43:50.643 に答える
3

&data[0]は確かに r 値を生成しますが、関数はそれを受け入れることができません。

関数を変更したくない場合の簡単な回避策 (参照が必要な理由を理解していることを確認してください):

unsigned int* ptr = &data[0];
func(ptr);
于 2012-08-15T12:44:31.787 に答える
1

書く

unsigned int *argument = &data[0];
call_function(argument);

関数は の値を変更することを期待している可能性があることに注意してくださいargument

data.assign(argument, argument + new_length);
于 2012-08-15T12:45:40.117 に答える
1

&data[0] は右辺値ですが、関数パラメーターの型はポインターへの非定数参照です。非 const 参照を右辺値にバインドすることはできません。

OPが彼の問題についてより多くのコンテキストを提供するまで、適切な回避策を提案するのは困難です.

于 2012-08-15T12:42:41.930 に答える