Оператор BigInt + функция?

Я пытался работать с оператором + функция, но это не похоже на работу ..
Не уверен, что не так: s

BigInt.h

#include <iostream>
using namespace std;
using std::cout;

#ifndef BIGINT_H
#define BIGINT_H

class BigInt
{
//input and output operators
friend istream & operator >> (istream &, BigInt &);
friend ostream & operator << (ostream &, const BigInt &);

//overloaded operators
BigInt operator + (BigInt &, BigInt &);

public:
BigInt(); //default constructor
BigInt(int); //initializes array with user-specified numbers

// BigInt operator +(const BigInt &); //???

void display(); //prints array

private:
static const int CAPACITY = 40;
int Digits[CAPACITY]; //stores all digits

};
#endif

BigInt.cpp

#include <iostream>
#include "BigInt.h"using std::cout;

BigInt::BigInt()
{
for (int i = 0; i < CAPACITY; i++)
Digits[i] = 0;
}

BigInt::BigInt(int InitNum)
{
for(int i = 0; i < CAPACITY; ++i)
Digits[i] = 0;

for (int i = 0; InitNum != 0 ; ++i)
{
Digits[i] = (InitNum % 10);
InitNum = InitNum / 10;
}
}

//------------------------------------------------------------------
BigInt operator +(BigInt & lhs, BigInt & rhs)
{
BigInt results;
int carry = 0;

for (int i = 39 ; i >= 0; i--)
{
int indexAddition = lhs.Digits[i] + rhs.Digits[i] + carry;
if (indexAddition > 9)
carry = 1;
else
carry = 0;

results.Digits[i] %= 10;
}

return results;
}

//-----------------------------------------------------------------
bool BigInt::operator == (const BigInt & rhs)
{
for(int i = 0; i < CAPACITY; i++)
{
if (Digits[i] != rhs.Digits[i])
return false;
}
return true;
}

//-----------------------------------------------------------------
ostream & operator << (ostream & cout, const BigInt& a)
{
for(int i = a.CAPACITY - 1; i >= 0 ; i--)
cout << a.Digits[i];

cout << "\n";

return cout;
}

istream & operator >> (istream & cin,  BigInt& a)
{
for(int i = 0; i < a.CAPACITY; i++)
cin >> a.Digits[i];

return cin;
}

//---------------------------------------------------------------
void BigInt::display()
{
for(int i = CAPACITY - 1; i >= 0; i--)
cout << Digits[i];

cout << "\n";
}

main.cpp

#include <iostream>
#include <cstdlib>
#include <fstream>
#include "BigInt.h"
int main()
{
BigInt object1(45756369);
BigInt object2(47435892);

cout << object1;
object2.display();

BigInt object3 = object1 + object2;

cout << object3;

return 0;
}

Когда я пытался использовать

 BigInt operator +(const BigInt &);

, который был реализован таким образом:

BigInt::operator +(const BigInt &a)
{
BigInt result;

for(int i = 0; i < CAPACITY; i++)
result = Digits[i] + a.Digits[i];

return result;
}

Я получил бы эту ошибку:

BigInt.cpp: In function âBigInt& operator+(const BigInt&)â:
BigInt.cpp:36:23: error: âCAPACITYâ was not declared in this scope
BigInt.cpp:37:16: error: âDigitsâ was not declared in this scope
BigInt.h:50:23: error: âint BigInt::Digits [40]â is private
BigInt.cpp:37:30: error: within this context
BigInt.cpp:34:11: warning: reference to local variable âresultâ returned [enabled by default]

И когда я использую

BigInt operator +(BigInt & lhs, BigInt & rhs)
{
BigInt results;
int carry = 0;

for (int i = 39 ; i >= 0; i--)
{
int indexAddition = lhs.Digits[i] + rhs.Digits[i] + carry;

if (indexAddition > 9)
carry = 1;
else
carry = 0;

results.Digits[i] %= 10;
}

return results;
}In file included from BigInt.cpp:9:0:
BigInt.h:31:39: error: âBigInt BigInt::operator+(BigInt&, BigInt&)â must take either zero or one     argument
BigInt.h: In function âBigInt operator+(BigInt&, BigInt&)â:
BigInt.h:50:23: error: âint BigInt::Digits [40]â is private
BigInt.cpp:50:27: error: within this context
BigInt.h:50:23: error: âint BigInt::Digits [40]â is private
BigInt.cpp:50:43: error: within this context
BigInt.h:50:23: error: âint BigInt::Digits [40]â is private
BigInt.cpp:57:11: error: within this context

Зачем?
Спасибо!

0

Решение

Тот operator+ функция не является членом BigInt поэтому он не может получить доступ к своим частным членам. Вы должны объявить это как друга класса вместо этого:

friend BigIn operator +(BigInt &, BigInt &);
1

Другие решения

Вы забыли results.Digits [я] в строке 4

BigInt BigInt::operator+(const BigInt &a)
{
BigInt result;

for(int i = 0; i < CAPACITY; i++)
result.Digits[i] = Digits[i] + a.Digits[i];

return result;
}
1