我有一些代码。为了编译,我使用gcc编译器。
union uStackElement {
int i;
double d;
}
typedef union uStackElement StackElement;
...
StackElement stack_pop(Stack s);
...
StackElement a = stack_pop(Stack s); // error: incompatible types in assignment
...
我无法弄清楚什么是错的。 :(
UPD: 堆栈定义:
struct sStack
{
int top ;
StackElement array[STACK_SIZE];
};
typedef struct sStack Stack;
function stack_pop:
StackElement stack_pop(Stack s) {
StackElement ret;
if (s.top < 0) {
// TODO : error
}
ret = s.array[s.top--];
return ret;
}
答案 0 :(得分:1)
这可能是您的错误:
union uStackElement {
int i;
double d;
} // << missing semicolon
话虽如此,还有许多其他问题,例如,如果要改变它,需要将Stack
对象作为指针传递。
以下代码成功编译,此时您已经显示了所有内容。
#define STACK_SIZE 10
union uStackElement {
int i;
double d;
};
typedef union uStackElement StackElement;
struct sStack
{
int top;
StackElement array[STACK_SIZE];
};
typedef struct sStack Stack;
StackElement stack_pop(Stack s) {
StackElement ret;
if (s.top < 0) {
// TODO : error
}
ret = s.array[s.top--];
return ret;
}
int main() {
Stack s;
StackElement a = stack_pop(s);
}
如果上面的代码不看起来像您的代码,那么您需要编辑您的问题,以便我可以获取您的代码,并通过编译器运行它并自己查看错误。否则,您不包含的代码很可能实际上是错误所在的位置。