2012-01-07 30 views
2

注:これはタイトルにこの名前の10億回と1つの質問の複製ではありません。これはポインタと非常に奇妙なものと関係しています。==ではなく、偶発的な=ではありません。"代入の左辺オペランドとして必要な左辺値" - C++

outというvoid*引数を持つC++関数があります。 uint32_t*

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

size:私はこのラインを持っています。コンパイラが文句を言う:

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

何が問題なのですか?

+2

なぜここでキャスト( '(char *)')が必要だと思いますか? –

+1

'(char *)'? 'void *'、PODをポインタで渡す? '新しいchar []'?あなたは確かです*これはC++ですか? – Johnsyweb

+0

はい。ちょうど非常に奇妙なC++。非常に奇妙なC++。これは、関数ポインタによって参照されなければならない関数のセットの一部です。彼らはすべての種類のデータを返すことができる必要がありますが、彼らとエンド・コール者だけが型を知っています。中間コード(私のメインコード)は型が何であるか分からないので、 'int'や' char'sのようなものを 'void *'として渡す必要があります。 – Linuxios

答えて

7

(char*)out左辺値ではありません(out自体がかもしれないが、キャストは、物事を変える)、キャストは代入の反対側に属していると、あなたはボイドポインタではなく、char型のポインタにキャストしている:

あなただけで逃げることができるようにいずれの場合においても
out = (void*) (new char[*size]); 

void*は、他のポインタから暗黙的に変換される:

out = new char[*size]; 
+0

なぜキャストが必要なのですか? –

0

はを削除しますここでは何の目的も果たしません。

void *引数を使用している場合は、void*&のように(呼び出し元がそのポインタを見えるように)割り当てることはできません。引数。

1

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

(char *&)out= new char[*size]; 
関連する問題