通过基类调用时,实现的虚方法调用失败

时间:2013-09-26 08:52:11

标签: c++ inheritance embedded

我有这样的类结构:

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()并且失败了 - 通过调试器,我通常会在调用期间的某个时刻获得“未定义的指令”异常。

我已经将方法缩小到上面最粗糙的骨头,经过重新测试,我仍然会遇到同样的失败。我猜测虚拟表有问题,但我无法弄清楚是什么。有人可以提供一些帮助吗?

1 个答案:

答案 0 :(得分:2)

http://ideone.com/mIbNbs有效。 b_obj.a2()是正确的。

所以它应该是你的编译器的错误。 (或者你展示的代码不是正确的代码)