2016-05-21 13 views
0

私は私の迷路ロボット用に定義された二つの構造の下に持っています。警告:互換性のないポインタ型(ポインタと構造体)から割り当て

struct mazecells{ 
    char type; 
    int reachable; 
    int visited; 
}; 

typedef struct maze { 
    struct mazecells **M; 
    int startx, starty; 
    int numrows, numcolumns; 
    int initdir; 
}maze_t; 

void ReadMaze(maze_t *maze) { 
    char **mazeValue; 

... remaining declaration and logic ... 

mazevalue内部Iは、迷路の入力を読んでいると、私はmaze->M = mazeValueを使用して、あなたstruct maze_tに割り当てしようとしています。私は以下の警告を受けています:

warning: assignment from incompatible pointer type 
    maze->M = mazeValue; 

私は何かを誤解していますか?

+0

'M 'のタイプは' struct mazecells ** 'であり、' char **'ではありません。 – BLUEPIXY

+0

あなたは[この](http://stackoverflow.com/questions/5491704/is-it-possible-to-cast-a-char-to-a-struct)を読み取ることがありますか? – tijko

+0

'mazeValue'はタイプ' char ** 'を持ちます;これを 'struct mazecells **'型の変数に代入します。 Mは、構造体mazecells **型でありながら – kfx

答えて

1

mazeValuemaze->Mタイプstruct mazecells **(すなわちポインタmazecellsを構造体へのポインタに)からである(char型へのポインタにすなわちポインタ)タイプchar **です。

警告は、これら2つの変数がポインタの異なるタイプであると述べて、あなたが予期しない結果につながる可能性があり、他の1つを、割り当てています。

あなたが値を読み取る方法によっては、mazeValueの種類を変更したい場合があります。

1

たぶん私はそれが欠けていますが、なぜあなたはmazeValuemazecellsを作りませんか?

struct mazecells{ 
    char type; 
    int reachable; 
    int visited; 
}; 

typedef struct maze { 
    struct mazecells **M; 
    int startx, starty; 
    int numrows, numcolumns; 
    int initdir; 
}maze_t; 

void ReadMaze(maze_t *maze) { 
    struct mazecells **mazeValue; 

... 
1

次の2行を見てみましょう:

struct mazecells **M; 
char **mazeValue; 

あなたがはっきりと見ることができるように、これらの2つの変数が異なったタイプがあり、そのため、あなたは警告取得している:割り当てを互換性のないポインタタイプからこの値を取得しようとしているときmaze->M = mazeValue;

0

タイプが一致している必要があります。以下は、警告なしのクリーンコンパイルで、うまくいけばあなたが使うことができるものです。

#include <stdio.h> 

struct mazecells { 
    char type; 
    int reachable; 
    int visited; 
}; 

typedef struct maze { 
    struct mazecells **M; 
    int startx, starty; 
    int numrows, numcolumns; 
    int initdir; 
} maze_t; 


int main() { 
    maze_t maze1 = { .startx = 1, .starty = 1 }; 
    struct mazecells mz = { .type = 'A', .reachable = 1, .visited = 1 }; 
    struct mazecells * mptr = &mz; 
    struct mazecells ** mptr2 = &mptr; 
    maze1.M = mptr2; 
    struct mazecells * structmazecells = * maze1.M; 
    printf("%d", structmazecells->visited); 
    return 0; 
} 
関連する問題