Получение & quot; нет совпадения для ‘operator + =’, нет известного преобразования из аргумента 1 из ‘int’ в ‘const ItemStack & amp;’

Мне было очень трудно найти правильный способ перегрузки оператора + =. Я использовал то, что кажется самым популярным способом сделать это, но, похоже, он не отвечает потребностям этой программы. Если кто-то может помочь мне решить эту ошибку компилятора или указать правильное направление, это было бы удивительно. Вот код

Проблемная функция …

////////////storage.cpp
void storeItems( istream &inf, vector<ItemStack> &items ){
int id = 0; //temporary id
int q  = 0; //temporary count

cout << "Processing Log" << "\n";
printHorizontalLine( cout, '-', 36 );

while( inf >> id >> q ){
int loc = sequentialSearch( items, id );

if( loc != -1 ){
items[loc] += q;   <------ This operator is causing the error.

cout << "  Stored "<< right << setw(3) << q << " "<< items[loc].getName()
<< "\n";
}
else{
cout << "  Invalid ID (" << id << ")" << "\n";
}
}
println();
}

///////////itemstack.cpp

ItemStack::ItemStack( int i, std::string n ){
id       = i;
name     = n;
quantity = 0;
}

/**
*
*/
//void ItemStack::add( int amount ){
//    quantity += amount;
//}
inline
ItemStack& ItemStack::operator+= (const ItemStack &rhs)
{
quantity+= rhs.quantity;
return *this;
}

inline
ItemStack operator+(ItemStack lhs, const ItemStack& rhs)
{
lhs += rhs;
return lhs;
}

/**
*
*/
bool ItemStack::lowSupply(){
// Note the similarity to a condition in an if statement
return (quantity < 10);
}

bool ItemStack::operator== (const ItemStack& s1) const
{
return id == s1.id
&& quantity == s1.quantity
&& name == s1.name;
}

bool ItemStack::operator< (const ItemStack& s1)
{
return id == s1.id;
}

inline
ostream& operator<<( std::ostream &outs, const ItemStack &prt )
{
return outs;
}

`

-1

Решение

Ваш operator+= определяется как

ItemStack& ItemStack::operator+= (const ItemStack &rhs)

operator+= определяется для ItemStack & параметр.

Вы пытаетесь использовать его следующим образом:

items[loc] += q;

q является intи не ItemStack, Ваш += Оператор определен только для ItemStack ссылка.

2

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

Других решений пока нет …