2016-09-02 8 views
-1

入力タイプがstruct playerであるプレーゲームで、mainから関数 "play game"を呼び出そうとしています。しかし、私は取得していますエラー:c - structポインタを期待していますが、構造体とその逆を取得しています

reversi.c:47:12: error: incompatible types when assigning to type ‘struct player’ from type ‘struct player *’ 
*winner = play_game(first , second); 

私は」:私はポインタであることに引数の型を切り替えるとエラーで

game.h:18:17: note: expected ‘struct player *’ but argument is of type ‘struct player’ 
struct player * play_game(struct player * first, struct player * second); 
reversi.c:47:4: error: incompatible type for argument 1 of ‘play_game’ 
*winner = play_game(first , second); 

は私が手引数2

のために投げ出されています私はほぼ間違いがあると確信しています: "* winner = play_game(first、second)"という行が含まれていなければならないのに対し、.hファイル自体に関連しています。 ; "

私も、すべてのポインタを変更しようとしましたが、それがうまくいけば、私は失われてしまいますが、同じものにバリエーションを得る以外は得られませんでしたエラー。

投稿のためにコードをトリミングしましたが、それでも同じエラーが発生します。

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

#define NAMELEN 20 

struct player * play_game(struct player * first, struct player * second) ; 

enum cell 
{ 
     BLANK, RED, BLUE 
}; 

struct player 
{ 
    char name[NAMELEN + 1]; 
    enum cell token; 
    unsigned score; 
}; 

int main(void) 
{ 
    struct player first, second, *winner = NULL; 
    enter code here 
    *winner = play_game(first , second); 

    return EXIT_SUCCESS; 
} 


struct player * play_game(struct player * first, struct player * second) 
{ 

    return first; 

} 

ご協力いただきありがとうございます。

+0

物とポインタの違いを知っていますか? – immibis

+0

@immibis私もそうではないと思います。私はそれらの上に戻って行くつもりです。 – Occlude

答えて

1

関数呼び出しのマストは、あなたが参照することにより、コールとして引数を取ると機能を定義した

winner = play_game(&first , &second); 
+0

ありがとうございます。私は関数内にポインタを追加することを含むかもしれないと思ったが、勝者の前にポインタを削除するとは思わなかった。 – Occlude

+0

@Olulude全くありません。あなたは大歓迎です:) –

0

ように見えます。したがって、引数call by referenceを使って関数を呼び出す必要があります。

winner = play_game(&first , &second); 

そして勝者変数に戻り値を代入しながら*を除去します。

+1

これは "参照による呼び出し"ではなく、ポインタ値を持つ通常の呼び出しです。 – immibis

関連する問題