2016-07-19 3 views
2

У меня есть class Item и Item items и int q. Я пытаюсь сделать функцию для перегрузки + =. Мне нужна функция друга или она должна быть участницей?Перегрузка оператора C++ + =

Заявление в основной программе является

   items+=q; 

в классе Item заголовочном файле:

friend Item operator+=(const Item&, int&); 

в классе Item CPP файле:

Item operator+=(const Item& items, int& q) 
    { 
     items+=q; 
     return items; 
    } 

И поэтому компилятор говорит не ровня "+ ="

+2

см [здесь] (HTTP: // StackOverflow. com/questions/4421706/operator-overloading) – GreatAndPowerfulOz

+2

Ваш 'fiend Item operator + = (const Item &, int &)' не может работать: 'item' - это то, что будет добавлено к' q', но ваша функция принимает 'const ', что означает, что он не может быть изменен. 'operator + = (item &, const int &)' будет работать. – kfsone

+0

Кроме того, функция бесконечно рекурсивна. '+ = (Item, int)' безоговорочно вызывает '+ = (Item, int)' –

ответ

1

А + = оператор может либо вернуть пустоту так:

class Point 
{ 
private: 
    int x; 
    int y; 
public: 
    void operator += (const Point& operand) 
    { 
    this->x += operand.x; 
    this->y += operand.y; 
    } 
}; 

или может возвращать ссылку:

class Point 
{ 
private: 
    int x; 
    int y; 
public: 
    Point& operator += (const Point& operand) 
    { 
    this->x += operand.x; 
    this->y += operand.y; 

    return *this; 
    } 
}; 

последняя лучший способ делать то, что позволяет цепочки.

+0

спасибо, я попробую это. – Alex

+0

Это не работает, потому что int q находится в моей основной программе, и я пытаюсь сделать элементы + = количество в моем определении класса Item. количество является частным членом класса Item. Он не будет компилироваться, потому что он говорит, что не может преобразовать invert 'int' в class 'Item'. – Alex

+0

Можете ли вы поделиться своим кодом? – Zulukas

0

изменить это:

Item operator+=(const Item& items, int& q) 
    { 
     items+=q; 
     return items; 
    } 

в

Item operator+=(int q) 
    { 
     this->quanity += q; 
     return *this; 
    } 

конечно, это означает, что это член класса ...

+0

спасибо, я попробую. – Alex

 Смежные вопросы

  • Нет связанных вопросов^_^