2017-08-28 45 views
0

我们开始涉及对象和类。我有三个文件:bigNumberTest.cpp,bigNumber.cpp和bigNumber.h。传递对象作为参数,没有可行的重载'='

我具有说的“不可行性重载‘=’”在我的主要一个错误:

bigNumberTest.cpp(provided by instructor) 

int main(){ 
    //code 
    sum = num1.addBig(num2); 
    //code 
} 

我收到了第二个错误,当我在bigNumber.cpp与文件中定义的函数:

num[i] = num[i] + num2[i]; 

这里的错误是:“类型'bigNumber'不提供下标运算符。”

bigNumber.cpp 

void bigNumber::addBig(bigNumber num2){ 

    //sums the two arrays 
    for (int i = 0; i < MAX_DIGITS; i++){ 
    num[i] = num[i] + num2[i]; 
    } 
} 

整体代码没有完全完成,但我想解决这些问题。我提供了我认为只是必要的代码,但让我知道你是否需要更多信息。我还没有完全理解对象和类。

bigNumber.h file: 

class bigNumber{ 

private: 

    const int MAX_DIGITS = 100; 
    int num[100]; 

public: 

    void readBig(); 
    void addBig(bigNumber); 
    void printBig(); 
}; 
+0

Google“C++操作符重载”。在这里解释操作符重载的全部内容可能过于宽泛。 – taskinoor

+2

如果'addBig'有'void'返回类型,那么'sum = num1.addBig(num2);'不起作用(也没有意义),也许想想你在那条线上做什么 –

+0

'num2 [i]'应该是'num2.num [i]' –

回答

-1

在主程序中,操作数的类型为bigNumber。编译器不知道如何对它们执行'='操作。你必须自己写。重载支持数据类型的'='符号。

应该是这样的:

void bigNumber::operator=(bigNumber rhs) 
{ 
    for(int i=0 ; i<MAX_DIGITS ; i++) 
    { 
     this->num[i] = rhs.num[i]; 
    } 
} 

而对于第二个错误,num2仅仅是一个变量。 num2对象中有一个变量num

所以,实际的代码必须是:

bigNumber.cpp 

void bigNumber::addBig(bigNumber num2){ 

    //sums the two arrays 
    for (int i = 0; i < MAX_DIGITS; i++){ 
     this->num[i] = this->num[i] + num2.num[i]; 
    } 
} 

尝试学习更多有关this运营商。

+0

你的答案是解决真正的问题。请参阅@ M.M的评论。 –

+0

通常“编译器”为用户定义的类型提供'operator ='。在这种情况下,它甚至会做正确的事情。 – juanchopanza

相关问题