错误:工会分配中的不兼容类型

时间:2013-10-20 17:00:49

标签: c unions

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

1 个答案:

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

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