Мне очень трудно найти правильный способ перегрузить оператор + =. что, по-видимому, является самым популярным методом его выполнения, но, похоже, не соответствует потребностям этой программы. Если кто-нибудь может помочь мне решить эту ошибку компилятора или указать мне в правильном направлении, это было бы потрясающе. Вот код.Получение «no match for» operator + = ', не известное преобразование из аргумента 1 из' int 'в' const ItemStack & '
функция Проблема ...
////////////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;
}
`
Ваш оператор в порядке, это просто * как * вы используете неправильно. – Rakete1111
Итак, что вы ожидали, произойдет в 'items [loc] + = q'? Вы ожидали, что 'q' получит неявное преобразование в тип« ItemStack »? Или что-то другое? – AnT
Если я определяю + = как взятие int в качестве параметра, я получаю неопределенную ссылку на «ItemStack :: operator + = (int const &) error. Мне трудно получить переменную, которой нет в классе, добавленном к переменной класса, которая уже является int, используя этот перегруженный оператор. – Zivian