2

注: これは、タイトルにこの名前が付けられた 10 億と 1 つの質問の複製ではありません。=これは、 の代わりに偶発的なものではなく、ポインターと非常に奇妙なものに関係しています==

void*という引数を持つ C++ 関数がありますout。私はこの行を持っています:

(char*)out=new char[*size];

のどこsizeuint32_t*. コンパイラは不平を言います:

fundemental_bin_types.h:55:32: error: lvalue required as left operand of assignment

なにが問題ですか?

4

3 に答える 3

7

(char*)out左辺値ではありませんout(それ自体はそうかもしれませんが、キャストは物事を変更します)、キャストは割り当ての反対側に属し、charポインターではなくvoidポインターにキャストしています:

out = (void*) (new char[*size]);

いずれにせよ、void*他のポインターから暗黙的に変換可能であるため、次のようにするだけで済みます。

out = new char[*size];
于 2012-01-07T00:12:20.563 に答える
1

C ポインタ キャストは左辺値を作成します。参照型にキャストしない限り、C++ ポインター キャストは機能しません。つまり、次のようにコンパイルする必要があります。

(char *&)out= new char[*size];
于 2012-01-07T00:37:44.050 に答える
0

ここでは役に立たないので削除し(char*)ます。(または、説明していない目的に役立ちます。)

void* 引数がある場合、引数のように単純に代入することはできません (呼び出し元にそのポインターが表示されるようにするため) void*&

于 2012-01-07T00:13:58.460 に答える