我有一个BigInt
类型,它在称为private m_digitArray
的char数组中以数字数组(0-9)形式存储大量数字。
我试图使数组访问运算符[]
重载,并且它可以工作,无论是访问还是分配char值。
然后,我尝试重载赋值运算符=
,这给了我上述错误。
我要去哪里错了?如何将值从一个BigInt
对象传输(基本上复制)到另一个BigInt.cpp:129:25: error: no viable overloaded operator[] for type 'const BigInt' m_digitArray[i] = rhs[i]; ~~~^~BigInt.cpp:114:16: note: candidate function not viable: 'this' argument has type 'const BigInt', but method is not marked constchar & BigInt::operator [] (int i){ ^1 error generated.
对象?
这是代码
BigInt.h
#include <iostream>
using namespace std;
class BigInt{
private:
// Object Data
char *m_digitArray;
unsigned int m_digitArraySize;
bool m_isPositive;
// Private Methods
int getNumOfDigits(int number);
void reverseArray(char arr[], int start, int end);
public:
// Constructors
BigInt();
BigInt(int numOfDigits);
BigInt(const BigInt &bi);
BigInt(const string &number);
// Access
int getSize() const;
bool isPositive() const;
char &operator [] (int);
};
BigInt.cpp
int BigInt::getSize() const {
return m_digitArraySize;
}
bool BigInt::isPositive() const {
return m_isPositive;
}
char & BigInt::operator [] (int i){
if(i > m_digitArraySize-1){
cerr << "Error: Array index out of bounds!" << endl;
exit(0);
}
return m_digitArray[i];
}
BigInt & BigInt::operator = (const BigInt &rhs){
if(this != &rhs){
m_digitArraySize = rhs.getSize();
m_isPositive = rhs.isPositive();
m_digitArray = new char[m_digitArraySize];
for (int i = 0; i < m_digitArraySize; ++i){
m_digitArray[i] = rhs[i];
}
}
return *this;
}
错误
ojit_code
最佳答案
感谢@DeiDei指出我需要两个单独的重载。我想我在误读错误提示。
通过将其添加到头文件来修复它:
char operator [] (int) const;
这是实现:
char BigInt::operator [] (int i) const{
if(i > m_digitArraySize-1){
cerr << "Error: Array index out of bounds!" << endl;
exit(0);
}
return m_digitArray[i];
}
关于c++ - const类型没有可行的重载运算符[],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43022066/