1

別の構造体ポインタの構造体ポインタへの割り当てに問題があります

構造体は次のようになります。

header.h

typedef struct {
    int drawnlines;
    char *name;
} player;

typedef struct {
    char a, b;
    p *mover;
    p *previous;
} lastmove;

別の関数で、この構造体へのポインターを変更するはずの別の関数を呼び出していますが、これは警告を表示する関数でもあります。

program.c

#include header.h
.....
lastmove lmv;
lmv.mover=malloc(sizeof(player *));
lmv.previous=malloc(sizeof(player *));
player p;
p.drawnlines=0;
p.drawnlines=0;
strcpy(p.name, "patrik");
function(&lmv, &p);

.....
int
function(lastmove *lmv, player *p)
{
    lmv->a='b';
    lmv->b='a';
    lmv->previous=lmv->mover;
    lmv->mover=p;        // warning: assignment from incompatible pointer type
}

私のコードで何が間違っていますか?

更新:コードが機能するようになりました。これは単純な間違いでした。構造体「lastmove」は次のように変更されました

typedef struct {
    char a, b;
    player *mover;
    player *previous;
} lastmove;
4

1 に答える 1

1

さて、あなたのコードでmoverは、どこにも定義されていない type へのポインタpです - これはどういう意味ですか?

typedef struct {
    char a, b;
    player *mover;
    player *previous;
} lastmove;

また、あなたの割り当てにも問題があると思います。player*に十分なスペースが必要な場合、プレーヤーへのポインターである に十分なスペースを割り当てていますplayer

于 2012-11-12T02:08:01.453 に答える