2011-08-15 17 views
13

これは私にとっては混乱しています。私はこの割り当てが間違っているのか分からない:どのようにCでvoidポインタをcharポインタに変換しますか

void *pa; void *pb; 
char *ptemp; char *ptemp2; 

ptemp = (char *)pa; 
ptemp2 = (char *)pb; 

を、私はこのエラーを取得しています、なぜ誰も私に伝えることができます:

error: invalid conversion from ‘void*’ to ‘char*’

+6

このコードでは、エラーは発生しません(適切なコンテキストを前提とします)。これらのコンバージョンについて無効なものは何もありません。このようなエラーは、通常、C++の 'ptemp = pa'代入(すなわち、キャスト、C++コンパイラなし)に対して生成されます。あなたはCコンパイラを使用していると主張しており、そこに明示的にキャストされています。あなたの場合、このようなエラーはありません。実際のコードを投稿してください。 – AnT

+1

どのようなコンパイラ?それはCコンパイラであり、C++コンパイラではありませんか?あなたが持っているものは法的なCであり、C99の標準モードでは何の問題もなくgccを通過します。 –

+1

これは奇妙なエラーメッセージです... –

答えて

21

を実際に、あなたのコンパイラと間違って何かがなければなりません(またはあなたは完全な話を話していない)。 void*char*にキャストすることは完全に合法です。さらに、変換がが暗黙のはCで(++ Cとは違って)、つまり、次のようにコンパイルする必要がありますであるだけでなく、私はちょうどモジュールと呼ばれるtemp.c.にあなたのコードを試してみました

char* pChar; 
void* pVoid; 
pChar = (char*)pVoid; //OK in both C and C++ 
pChar = pVoid;  //OK in C, convertion is implicit 
+0

私はg ++コンパイラを使用していますが、Visual C++のコードをコンパイルしても問題はありませんが、g ++ではこのエラーが発生します – Jimmy

3

私はf1という関数を追加しました。 Linuxの

void *pa; void *pb; 
char *ptemp; char *ptemp2; 

f1() 
{ 
     ptemp = (char *)pa; 
     ptemp2 = (char *)pb; 
} 

私はgccの-c temp.cに入り、これはエラーや警告なしでコンパイルされました。

どのOSでこれを試していますか?

+7

OSはなぜ重要ですか? –

+0

私はg ++ではなくコンパイラとしてg ++を使用しています。おそらくgccにこれに問題がありますか? – Jimmy

+0

私は間違ったコンパイラを使用していたとしてThannkあなた – Jimmy

関連する問題