私は次のように定義された構造体を持っています:
typedef struct {
int type;
void* info;
} Data;
次に、次の関数を使用してvoid *に割り当てたい構造体が他にもいくつかあります。
Data* insert_data(int t, void* s)
{
Data * d = (Data*)malloc(sizeof(Data));
d->type = t;
d->info = s;
return d;
}
struct {
...
} Struct#;
それから私はただ電話します
insert_data(1, variable_of_type_Struct#);
これをコンパイルすると警告が表示されます
warning: assignment from incompatible pointer type
挿入内の変数を(void *)にキャストしようとしましたが、機能しませんでした
insert_data(1, (void *) variable_of_type_Struct#);
この警告を取り除くにはどうすればよいですか?
ありがとう
構造体のコピーではなく、構造体のアドレスを渡します(つまり、値で渡されません):
insert_data(1, &variable_of_type_Struct);
構造体オブジェクトへのポインタを渡します。
struct your_struct_type bla;
insert_data(1, &bla);
このプログラムがお役に立てば幸いです。
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int type;
void* info;
} Data;
typedef struct {
int i;
char a;
float f;
double d;
}info;
Data* insert_data(int t, void* s)
{
Data * d = (Data*)malloc(sizeof(Data));
d->type = t;
d->info = s;
return d;
}
int main()
{
info in;
Data * d;
d = insert_data(10, &in);
return 0;
}
これが何であったかはよくわかりません。
_struct {
...
} Struct#;
_
だから、私はあなたのプログラムを少しクリーンアップし、構造体のアドレスを呼び出しに入れた後、警告を受け取りませんでした、insert_data(1, &variable_of_type_Struct);
_#include <stdlib.h>
#include <stdio.h>
typedef struct {
int type;
void* info;
} Data;
Data* insert_data(int t, void* s);
Data variable_of_type_Struct;
Data* insert_data(int t, void* s)
{
Data * d = (Data*)malloc(sizeof(Data));
d->type = t;
d->info = s;
return d;
}
void test()
{
insert_data(1, &variable_of_type_Struct);
}
_
insert_data
はvoid*
を待ち、Data
を置きます。
insert_data(1, &variable_of_type_Struct#);
間接参照のレベルを見逃しています。