-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 に答える