C ++使用数组和结构进行排序,并使用指针

时间:2015-10-01 18:49:08

标签: c++ arrays sorting pointers struct

我有类似这样的家庭作业,但是我的结构指向我的数组,因为它包含99个项目。我如何包含指针,以便从每个项目中读取?这是我到目前为止所拥有的。 当我尝试运行它时,我收到temp.name = ...所在的错误。

struct Item
{
    string name;
    float price;
    char category;
    int numberOfPiecesInStock;
    Date lastSDate;
    Date outOfStockSinceDate;
};

using namespace std;
int main ()
{
    Item *giftItems;
    ///////////MORE CODE ///////
}

void sortByItemNum(Item *giftItems, int length)
{
    Item temp;
    int i, j;


    for (i = 1; i < length; i++)
    {
        temp.name = Item *giftItems[i]->name;
        temp.price = Item *giftItems[i]->price;
        temp.category = Item *giftItems[i]->category;
        temp.numberOfPiecesInStock = Item *giftItems[i]->numberOfPiecesInStock;

        j = 1;
        while (j > 0 && (temp.numberOfPiecesInStock = giftItems[j-1]->numberOfPiecesInStock > temp.numberOfPiecesInStock)
        {
            giftItems[j]->numberOfPiecesInStock = giftItems[j-1].numberOfPiecesInStock;
            j--;
        }
        // giftItems[j]->numberOfPiecesInStock = temp;
        // swap (Item temp, i, j);
    }
}

2 个答案:

答案 0 :(得分:0)

我认为giftItems是一个数量为length的数组。要引用数组中的单个项,您需要使用以下格式:

giftItems[i].member

而不是这种形式:

Item *giftItems[i]->member

答案 1 :(得分:0)

试图不只是给你解决方案......

我们来看看:

temp.name = Item *giftItems[i]->name;
temp.price = Item *giftItems[i]->price;
temp.category = Item *giftItems[i]->category;
temp.numberOfPiecesInStock = Item *giftItems[i]->numberOfPiecesInStock;

您最有可能得到的是投射错误,因为您在上述作业中的指针前面有“项目”。

您在运行时告诉程序要强制转换

*giftItems[i]->name

到Item对象,然后将其分配给temp.name,这是一个字符串。这肯定会导致错误。