Извините за название. Я не могу сделать что-то более описательное или ясное, чем это ..
Я пытаюсь сделать что-то, что очень похоже на c аукцион.
Чтобы упростить ситуацию, я собираюсь поместите сюда самое необходимое для каждого класса. Еще я перевел все с испанского sh на английский sh, так что если есть опечатка, то только здесь. Фактический код компилируется нормально.
Здесь задействовано четыре класса:
class Person
{
private:
std::string name;
}
class Offer
{
private:
int amount;
Person *bidder;
}
class Item
{
private:
int itemNumber;
std::string itemName;
Offer *biggestBidder;
public:
Item(int, std::string)
void setbiggestBidder(Offer* const &); // I did this '* const &' thing while trying solutions
Oferta *getBiggestBidder();
}
class Auction
{
private:
std::vector<Item> itemCollection;
int amountOfItems; // in above's collection
}
Я не помещал сюда геттеры, сеттеры и конструкторы / деструкторы, так что это не слишком долго. Внутри предмета. cpp У меня есть:
Item::Item(int number, std::string name)
:itemNumber(number),
itemName(name),
biggestBidder(NULL)
{
// this->itemNumber= number;
// this->itemName= name;
// this->biggestBidder= NULL;
}
void Item::setbiggestBidder(Offer* const &offer)
{
if (biggestBidder== NULL || biggestBidder->getAmount() < offer->getAmount())
{
std::cout << "Address of offer in setbiggestBidder: " << offer << std::endl;
std::cout << "Address of biggestBidder in setbiggestBidder: " << (biggestBidder) << std::endl;
biggestBidder = offer;
std::cout << "Address of biggestBidder in setbiggestBidder: " << (biggestBidder) << std::endl;
}
else
{
}
}
Oferta *Lote::getBiggestBidder()
{
std::cout << "Address of biggestBidder in getBiggestBidder(): " << this->biggestBidder << std::endl;
if (this->biggestBidder == nullptr)
{
std::cout << "biggestBidder IS NULL" << std::endl;
}
else
{
std::cout << "biggestBidder is NOT NULL" << std::endl;
}
return biggestBidder;
}
Теперь главное и проблема:
Item l1(111, "BANANA");
Item l2(222, "MESA"); // this number 222 is just an ID for the item. It does nothing
Person p1("TheDude");
Offer of1(100, &p1);
// now put the item inside a vector and create an auction instance
std::vector<Item> item1;
collect.push_back(banana);
Auction coleccion1(collect, collect.size());
/*
Now we are ready. If I do this..
*/
std::cout << "Test with item outside vector" << std::endl;
std::cout << "Bidding $" << of1.getAmount() << " for item number "
<< l2.getNumber() << ", " << l2.getItemName() << std::endl;
l2.setBiggestBidder(&of1); // amount 100
/*
If here I do
l2.setBiggestBidder(&of2); // amount 200
l2.setBiggestBidder(&of1); // amount 100
At the bottom of the output, we get 200. It's all good.
*/
std::cout << l2.getBiggestBidder()->getAmount() << std::endl;
/*
We get this output:
Test with item outside vector
Bidding $100 for item number 222, MESA
Address of offer in setbiggestBidder: 0x66fb20
Address of biggestBidder in setbiggestBidder: 0
Address of biggestBidder in setbiggestBidder: 0x66fb20
Address of biggestBidder in getBiggestBidder(): 0x66fb20
biggestBidder is NOT NULL
200 <-- l2.getBiggestBidder()->getAmount()
*/
// But if we try with the item inside the vector:
std::cout << "Bidding $" << of1.getAmount() << " for item number "
<< coleccion1.getItemCollection().at(0).getNumber() << ", "
<< coleccion1.getItemCollection().at(0).getItemName() << std::endl;
/*
We get:
Test with item in vector
Bidding $100 for item number 111, BANANA
Address of offer in setbiggestBidder: 0x66fb10
Address of biggestBidder in setbiggestBidder: 0
Address of biggestBidder in setbiggestBidder: 0x66fb10
Address of biggestBidder in getBiggestBidder(): 0
biggestBidder IS NULL
0
and here is the issue.
*/
Мне действительно не нравится, когда нужно делать такой большой пост для проблемы я уверен, что это что-то очень базовое c, но я искал везде и не могу найти никакого решения этой проблемы. Прошло несколько недель с тех пор, как я наткнулся на это.
Почему все работает нормально, если я помещаю элемент в метод setBiggestBidder, но изменение не сохраняется в конце метода, когда я помещаю элемент, который является внутри вектора? И как исправить?