【发布时间】:2015-07-27 16:00:14
【问题描述】:
我正在学习 C++,正在学习 Vandevoorde 和 Josuttis 的 C++ 模板的第 18 章。我为表达式模板重新输入了他们的代码,但以下是产生错误
sarray1.cpp:36:6: error: ‘T& SArray<T>::operator[](size_t) const’ cannot be overloaded
T& operator[] (size_t idx) const {
^
sarray1.cpp:32:5: error: with ‘T SArray<T>::operator[](size_t) const’
T operator[] (size_t idx) const {
代码如下:
template <typename T>
class SArray {
public:
...
T operator[] (size_t idx) const {
return storage[idx];
}
T& operator[] (size_t idx) const {
return storage[idx];
}
...
};
我只是在学习 C++,所以我没有看到仅返回类型不同的重载函数的实例,但我看到这确实完成了:Overload a C++ function according to the return value。我还看到 [] 不在 C++ 中的 list of operators that cannot be overloaded 上。我想不出还有什么问题。出现上述错误的原因是什么?
【问题讨论】:
-
不确定,但似乎相关:Const and Non-Const Operator Overloading 如果
T&版本上的const是错误的? -
是的,第二行的 const 是一个错误,如下面的答案之一所示。但是,我将保留未编辑的问题,以便回复有意义。对不起这种类型,所有。
标签: c++ templates overloading