-2

我有一些代码。对于编译,我使用 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;

函数 stack_pop :

StackElement stack_pop(Stack s) {
        StackElement ret;
        if (s.top < 0) {
                // TODO : error
        }
        ret = s.array[s.top--];
        return ret;
}
4

1 回答 1

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);
}

如果上面的代码看起来不像您的代码,那么您需要编辑您的问题,以便我可以获取您的代码,并通过编译器运行它并亲自查看错误。否则,很可能您未包含的代码实际上是错误所在。

于 2013-10-20T17:23:16.217 回答