我想实现一个堆栈。我有以下的堆栈结构:获取成员的请求不是结构或联合错误
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
。
有人可以帮我解决这个问题吗?
首选解决方案:仔细阅读整个程序,非常小心地注意指向结构体和结构体的指针,以及如何使用每个结构体,以及如何像对待第一个那样修复您处理的位置。例如,'topPtr-> data'对于'topPtr'来说实在是一个指向StackNode的指针,但它不是......它是一个指向指针的指针。 '* topPtr-> data'会得到你要找的东西。 – mah 2013-05-09 14:43:58
你的'malloc'最有可能也是错的。你应该做'temp = malloc(sizeof(StackNode));'通常认为隐藏指针在'typedef'中通常被认为是不好的做法。你容易混淆间接程度。 – 2013-05-09 15:49:49