【问题标题】:Argument of type 'const char*' is incompatible with parameter of type 'char*'“const char*”类型的参数与“char*”类型的参数不兼容
【发布时间】:2016-05-19 03:17:48
【问题描述】:

在运算符重载函数中,我使用了另一个复制数组的函数。但是当我调用函数 arrayCopy() 时,我收到一条错误消息:

“const char*”类型的参数与“char*”类型的参数不兼容。

有什么原因和解决方法可以解决这个问题吗?

class InfinateInteger {
public:
    InfinateInteger();
    InfinateInteger(char c[]);
    int* digitBreakDown(int c);
    int digitLength(int c);
    void intConversion(char stringArray[], int convertArray[], int size, int printQ);
    void arrayCopy(char originalArray[], char copyArray[], int size);

    const InfinateInteger operator +(const InfinateInteger& sec);    
    char * getIntString(); //getters
    int getDigitL();

    void setIntString(char newStr[]); //setters
    void setDigitL(int length);

private:
    char intString[1000000];
    int posNeg = 1; //if pos ==1 if neg ==0
    int digitL = 0;
};

const InfinateInteger InfinateInteger:: operator +(const InfinateInteger& sec) { 
//function in which error is occurring
    char str1[1000000];
    arrayCopy(intString, str1, getDigitL());
    char str2[1000000];
    arrayCopy(sec.intString, str2, getDigitL()); //<--line where error occurs!!!!!
    return InfinateInteger();
}

void InfinateInteger::arrayCopy(char originalArray[], char copyArray[], int size) {
    for (int i = 0; i < size; i++) {
        copyArray[i] = originalArray[i];
    }
}

【问题讨论】:

  • 这是infinite,而不是infinatesec 在您的方法中是 const,您认为 sec.intString 的实际类型在该代码中是什么?

标签: c++ arrays char copy constants


【解决方案1】:

调用arrayCopy的函数定义如下:

const InfinateInteger InfinateInteger:: operator +(const InfinateInteger& sec) { 

可以看到sec被限定为const,也就是说sec.intString也是const

另一方面,arrayCopy 被定义为

void InfinateInteger::arrayCopy(char originalArray[], char copyArray[], int size) {

originalArray 不是const,这就是您收到错误的原因。

arrayCopy更改为

void InfinateInteger::arrayCopy(const char originalArray[], char copyArray[], int size) {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2021-08-06
    • 2020-11-19
    • 1970-01-01
    相关资源
    最近更新 更多