[英]How to call a non-const operator?
因此,在尝试致电特定运营商时遇到了麻烦。 在某堂课上,我得到:
template <class Object>
const Object& MyVector<Object>::operator[] (int index ) const {
if (index < 0 || index >= mSize)
throw MyException();
return mObjects[index];
}
而且我也被给予
template <class Object>
Object& MyVector<Object>::operator[]( int index ){
if (index < 0 || index >= mSize)
throw MyException();
return mObjects[index];
}
我想调用第二个,以便可以修改该值,但是编译器一直告诉我不能这样做,因为我正在尝试修改常量。
这是我尝试使用运算符功能的地方:
template <class Object>
const Object& Matrix<Object>::get(int r, int c) const{
MyObject *row = & MyVectorObject[r]; //error
//snipped
}
我不断收到错误:无法从const MyObject *
转换为MyObject *
要调用对象的非常量成员函数(包括运算符),对象/引用必须为非常量。 如果通过指针调用该函数,则该函数必须是指向非常量的指针。
在您的情况下, MyVectorObject
是const,因此调用了const重载。 从代码中看不出来为什么它是const,但是在注释中却表明它是成员。 通过this
指针隐式访问成员,而在const成员函数内部, this
当然是指向const的指针。
Matrix<Object>::get()
方法是const,因此,如果您在该方法中访问Matrix的类属性,则所有这些属性都将被视为const。
MyObject *row = & MyVectorObject[r]
将有效地调用const Object& MyVector<Object>::operator[] (int index ) const
。
const Object& MyVector<Object>::operator[] (int index ) const
将返回一个const Object&
。
因此, MyVectorObject[r]
的类型为const Object&
而& MyVectorObject[r]
的类型为const Object *
您应该这样写: const MyObject *row = & MyVectorObject[r];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.