所以我在尝试调用特定运算符时遇到了问题。在某些课程中,我得到了:
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。
CCD_ 7将有效地调用CCD_。
CCD_ 9将返回一个CCD_。
因此MyVectorObject[r]
是const Object&
型,& MyVectorObject[r]
将是const Object *
型
你应该写:const MyObject *row = & MyVectorObject[r];