我有一个关于迷宫求解算法的任务,我使用路径树来解决它,这些是我的结构:
typedef struct node* nodePtr;
typedef struct root{
int coordX;
int coordY;
nodePtr child[4];
} root;
typedef struct node{
int coordX;
int coordY;
char val;
nodePtr child[3];
void* parent;
} node;
父指针可以是指向root的指针,也可以是指向节点的指针,以便在树中没有循环。我在分配节点时检查了这个问题:
void assignNode(nodePtr *nodeAddr, int x, int y, char **maze, void *parent){
...some codes...
if(y != parent->coordY && x != parent->coordX)
这是我遇到恼人的错误
dereferencing 'void *' pointer
error: request for member 'coordY' in something not struct or union
error: request for member 'coordX' in something not struct or union
答案 0 :(得分:1)
您无法像这样取消引用void*
。它需要知道指针的类型(在您的情况下为node*
或root*
)。因此,您需要typecast
指针(node*
或root*
)。在这种特殊情况下,作为节点。
即而不是
if(y != parent->coordY && x != parent->coordX)
写
if(y != ((node*)parent)->coordY && x != ((node*)parent)->coordX)
但是因为它是你的代码,正如你所提到的那样,它可能是指针(node*
或root*
)的一种,你需要有一些方法来识别它,然后适当地进行类型转换。