Софтуерно Инженерство
Loading...
beholder avatar beholder 2 Точки

Предаване на pointer към array от обекти на функция и промяна на оригиналния обект

Здравейте опитвам се да се преборя с подточката от домашното за функция която да променя полето на цена на обект. Въпреки че ползвам pointer към масива от обекти и следователно истинския обект като елемент от този масив, а не копие крайния резултат е, че цената не се променя и съм зациклил. 

 

void ChangePrice(Item Itemslist[], string SearchCode, double NewPrice)
{
    for (int i = 0; i < sizeof(Itemslist) / sizeof(Item); i++)
    {
        if (Itemslist[i].Code == SearchCode)
        {
            Itemslist[i].Price = NewPrice;
        }
        cout << "value" << Itemslist[i].Price;
    }
};

В main: 

Item Items[numberOfItemsInShop];
    Item * ItemListPointer = Items;

        int newPrice;
        string searchCode;

            case 'P':
                cout << "Code and new price" << endl;
                cin >> searchCode;
                cin >> newPrice;
                ChangePrice(ItemListPointer, searchCode, newPrice);
                break;

 

0
C++ Programming 26/06/2016 02:58:20
beholder:
Получих помощта, която ми трябваше!
M.Yankov avatar M.Yankov 52 Точки
Best Answer

Направих един бърз sample. Мисля че проблема идва във функцята ChangePrice(). Понеже Itemslist ще сочи към първия елемент в масива, тогава sizeof(Itemslist) / sizeof(Item);  ще е равно на 0 и цикъла не се изпълнява изобщо.
 

Можеш да го подкараш тук http://cpp.sh/62sc

Ето го и кода:

#include <iostream>
#include <array>

void exampleTheTest();

int main ()
{
   exampleTheTest();
}

class TestItem
{
public:
	TestItem(double price, long code) : price(price), code(code)
	{
	}
	
	double price;
	long code;
};

void change(TestItem items[], long code, double price, int length)
{
	int testLength = sizeof(items) / sizeof(TestItem);
    std::cout << "sizeof(items) / sizeof(TestItem) = " <<  testLength << std::endl;

	for (int i = 0; i < length; i++)
	{
		if (items[i].code == code)
		{
			items[i].price = price;
		}
	}
}

void exampleTheTest()
{
	TestItem items[] = 
	{
		TestItem(1.1, 2313),
		TestItem(1.1, 2314),
		TestItem(1.1, 2315),
		TestItem(1.1, 2316),
		TestItem(1.1, 2317),
		TestItem(1.1, 2318),
	};

	TestItem * itempointer = items;

	int length = sizeof(items) / sizeof(TestItem);
	change(itempointer, 2315, 99, length);
	
	for (int i = 0; i < length; i++)
	{
		std::cout << items[i].code << " : " << items[i].price << std::endl;
	}
}

Разликата е единствено че в примера code е от тип long . Надявам се да ти свърши работа.

0
26/06/2016 14:12:25
beholder avatar beholder 2 Точки

Много, много ти благодаря!

0