2017-03-06 19 views
1

を構造体へキャストしていませんmyValuesに割り当てる*。私はmallocをキャストすべきではないことを知っているので、どうすればいいのですか?どうしましたか?malloc関数は、私は次の簡単なコードを持って

正確なエラー:

a value of type "void *" cannot be assigned to an entity of time "myValues *"

#include <stdio.h> 
#include <stdlib.h> 

typedef struct values 
{ 
int a; 
char c; 
void *pv; 
values *next; 
} myValues; 

int main(){ 
    myValues f; 
    myValues *n = malloc(sizeof(myValues)); 
} 
+1

正確なエラーメッセージを表示してください。 –

+1

C++をC言語として使用しました。 – BLUEPIXY

+1

タイプキャストは何ですか? – ysap

答えて

5

プログラムがC++プログラムとしてコンパイルされていることは明らかです。それ以外の場合、コンパイラは構造体定義のために名前valuesが宣言されていないというエラーを発行します。

typedef struct values 
{ 
int a; 
char c; 
void *pv; 
values *next; 
^^^^^^ 
} myValues; 

ので、あなたがタイプvoid *のポインタが暗黙のうちに別の型のポインタに変換することができないので、

myValues *n = (myValues *)malloc(sizeof(myValues)); 

を記述する必要があります。

(または、オペレータnewで使用するための機能mallocの呼び出しを代入例えばC++プログラムとして完全にプログラムを書き換える必要があります。)

それとも、Cプログラムとしてプログラムをコンパイルする必要があります。この場合、あなたは書いてください

typedef struct values 
{ 
int a; 
char c; 
void *pv; 
struct values *next; 
^^^^^^^^^^^^^ 
} myValues; 
+0

C++の場合、 'myValues * n = new myValues()'をお勧めします。 – zwol

+0

@zwol私はこれについて考えましたが、彼はC++コンパイラを使用していてもCプログラムとしてプログラムをコンパイルしたいと考えていました。 –

+0

だから、基本的に(コンパイラを使って)問題は、コンパイラは 'values'を知らないのですか?なぜそれはmallocと関係がありますか?なぜならmallocは構造体内のオブジェクトにも関係しているからです。 –

関連する問題