【发布时间】:2020-08-12 16:53:34
【问题描述】:
我公开将类模板“区域”的两个实例,一个 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)。如果我错了,请纠正我。如果我是正确的,为什么会模棱两可?
【问题讨论】:
-
@AzamBham 我已经尝试过使用语句。那是行不通的。 using 语句放在哪里?
-
编译器无法自动推断您要调用的
a.getArea()版本。尝试帮助它:std::cout << a.Area<char>::getArea() << std::endl; -
@MihaiTodor,感谢您回来。我也试过了,也没用。
-
为我工作:ideone.com/0WaMIo