我有一个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/

10-11 23:52
查看更多