3

私はこのようなクラス構造を持っています:

class A {
public:
    virtual int a1() = 0;
    int a2() {
        return a3();
    }
protected:
    int a3() {
        return a1();
    }
};

class B : public A {
public:
    virtual int a1() {
        return 1;
    }
};

int main() {
    B b_obj;
    int value1 = b_obj.a2(); // This fails.
}

KPIT GNU RX ツールチェーン (GCC ポート) を使用して Renesas RX63N プロセッサ用にビルドしています。コメントされているように、私はテストB::a2()しましたが、これは失敗しました-デバッガーをステップスルーすると、通常、呼び出し中のある時点で「未定義の命令」例外が発生します。

メソッドを上記の最小限の骨まで減らし、再テストしましたが、それでも同じ失敗が発生します。したがって、仮想テーブルに何か問題があると推測していますが、何が原因かわかりません。誰でも助けを提供できますか?

4

1 に答える 1

2

http://ideone.com/mIbNbs動作します。b_obj.a2()正しい。

したがって、コンパイラのバグである必要があります。(または、表示するコードが正しくない)

于 2013-09-26T09:32:23.610 に答える