C ++多重继承:函数不匹配?

时间:2016-07-07 12:30:09

标签: c++ inheritance

C ++不允许我构造SymIntPoly类型的对象并在其上调用f()。以下是类和结构。

template<typename T>
struct SymPoly
{
    T f() { return this->x; }
};

struct IntPoly
{
    int x;
    virtual int f() = 0;
};

struct SymIntPoly : public IntPoly, public SymPoly<int>
{
};

我不知道编译器,但我觉得编译器不会将这两个函数视为相同的函数(即它们没有相同的内部签名?)

我正在尝试做的另一种方式是什么?

1 个答案:

答案 0 :(得分:0)

你问了很多糟糕的编译器。如果它开始允许那些事情,情况可能变得非常模糊。

幸运的是,帮助它弄清楚你想要什么并不困难。尝试像

这样的东西
template<typename T>
struct SymPoly
{
    virtual T getX() =0;
    T f() { return getX(); }
};

struct IntPoly
{
    int x;
    virtual int f() = 0;
};

struct SymIntPoly : public IntPoly, public SymPoly<int>
{
    int getX() { return IntPoly::x; }
    int f() { return SymPoly<int>::f(); }
};

编译。