2013-05-09 77 views
0

我想实现一个堆栈。我有以下的堆栈结构:获取成员的请求不是结构或联合错误

struct stackNode 
{ 
    char data; 
    struct stackNode *nextPtr; 
}; 

typedef struct stackNode StackNode; 
typedef StackNode *StackNodePtr; 

当我尝试使用此为我的pop方法,我得到了一些错误信息。我的流行方法是:

char pop(StackNodePtr *topPtr) 
{  
    if (IsEmpty(topPtr)) 
    { 
    printf("Can't pop element from stack: stack is empty.\n"); 
    return 'n'; // arbitrary char to end if, will adjust this later. 
    } 
    char c = topPtr->data; //save data to be returned 

    // temporary StructNodePtr to save data 
    StackNodePtr temp; // temporary StackNodePtr 
    temp = malloc(sizeof(StackNodePtr)); 
    temp->data = topPtr->data; //line 52, first error 
    temp->nextPtr = topPtr->nextPtr; 

    //replace values in topPtr, this section I have yet to debug, is likely faulty. 
    topPtr->data = temp->nextPtr->data; //line 56, third error 
    topPtr->nextPtr = temp->nextPtr; 

    free(temp);  
    return (c); 
} 

我收到以下错误信息:

52:22: error: request for member ‘data’ in something not a structure or union 
53:25: error: request for member ‘nextPtr’ in something not a structure or union 
56:10: error: request for member ‘data’ in something not a structure or union 
57:10: error: request for member ‘nextPtr’ in something not a structure or union 

如果我做一个温度StackNode(和调整 - >相应地),我得到的错误"request for member ‘nextPtr’ or ’data’ in something not a structure or union"。在给我的问题中,topPtr必须是我的StackNodePtr

有人可以帮我解决这个问题吗?

+0

首选解决方案:仔细阅读整个程序,非常小心地注意指向结构体和结构体的指针,以及如何使用每个结构体,以及如何像对待第一个那样修复您处理的位置。例如,'topPtr-> data'对于'topPtr'来说实在是一个指向StackNode的指针,但它不是......它是一个指向指针的指针。 '* topPtr-> data'会得到你要找的东西。 – mah 2013-05-09 14:43:58

+0

你的'malloc'最有可能也是错的。你应该做'temp = malloc(sizeof(StackNode));'通常认为隐藏指针在'typedef'中通常被认为是不好的做法。你容易混淆间接程度。 – 2013-05-09 15:49:49

回答

2

topPtr是指向结构体指针的指针(StackNodePtr *topPtr = struct stackNode **topPtr)。所以你应该写(*topPtr) -> data而不是topPtr -> data

实际上,行char c = topPtr->data;也应该会导致错误。

+0

我现在非常感激!这解决了它!非常感谢!我不能相信我错过了这一点。谢谢你,谢谢你,谢谢你! – 2013-05-09 14:49:58

+0

不知道我不得不在括号中包装结构。好东西。 – MrPickles 2016-02-25 07:11:51

相关问题