gpt4 book ai didi

c++ - 多重继承模板的成员函数歧义

转载 作者:行者123 更新时间:2023-12-01 14:42:58 27 4
gpt4 key购买 nike

我公开将类模板“区域”的两个实例,一个 int 和另一个 char 派生到一个单独的类“矩形”中。

template<class T>
class Area {
public:
T a;
T getArea() { return a; }
void setArea(T t) { a = t; }
};

class Rectangle : public Area<int>, public Area<char> {
};

int main() {
Rectangle a;
a.setArea(1);
std::cout << a.getArea() << std::endl;
Rectangle b;
b.setArea('c');
std::cout << b.getArea() << std::endl;
}

我看到 setArea 和 getArea 有歧义。为什么呢?我想在 public Area 之后, public Area 会有两个 setArea 的定义。首先,void setArea(int) 和另一个 void setArea(char)。如果我错了,请纠正我。如果我是正确的,为什么会模棱两可?

最佳答案

如果带上姓名setArea使用 using 从两个基类到派生类声明:

class Rectangle : public Area<int>, public Area<char> {
using Area<int>::setArea;
using Area<char>::setArea;
};

编译器将能够调用正确的 setArea .

这不适用于 getArea因为这两个函数仅在返回类型上有所不同。您必须在调用站点区分它们:
std::cout << a.Area<int>::getArea() << std::endl;

关于c++ - 多重继承模板的成员函数歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61487609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com