字符串订阅超出范围 - 字符串气泡排序



在此处的第一篇文章,但是我一直在挖掘解决此错误的解决方案。我会遇到一个错误"字符串下标"

电话簿是一系列类联络对象指针。

static const int maxSize = 10;
Contact* phoneBook[maxSize]; //array of contact pointers

触点定义为

class Contact
{
public:
    Contact();
    std::string firstName;
    std::string lastName;
    std::string name; //lName + fName
    std::string phoneNumber;
    std::string address;
};

这是我的气泡排序功能。

void AddressBook::bubbleSort(Contact phoneBook[], int length)
{
Contact temp; 
for (int i = 0; i < length; i++)//for n-1 passes
{
    for (int j = 0; j < length - 1; j++)
    {
        if (phoneBook->name[j] > phoneBook->name[j + 1])
        {
            temp = phoneBook[j];
            phoneBook[j] = phoneBook[j + 1];
            phoneBook[j + 1] = temp;
            }
        }
    }
}

这是AddContact

void AddressBook::addContact(std::string fName, std::string lName, std::string pNumber, std::string addr) 
{
    if (isFull())
    {
        std::cout << "Is full" << std::endl;
        return;
    }
    Contact *contact = new Contact;
    contact->firstName = fName;
    contact->lastName = lName;
    contact->name = lName + ", " + fName;
    contact->phoneNumber = pNumber;
    contact->address = addr;
    std::cout << contact->name + " has been added!" << std::endl;
    phoneBook[length] = contact;
    length++; 
    bubbleSort(phoneBook[maxSize], length);
}

最后,我在哪里使用它(source.cpp)

switch (choice) 
{
case 1:
    addrBook.addContact("Ty", "Le", "6191231234", "1234 State Street");
    addrBook.addContact("Zak", "Zachary", "6191231234", "1234 Avenue Drive");

我知道该问题源自Bubblesort函数,因为当我从AddContact()中评论它时它会正常工作。

这是我错误的图片(太长复制和粘贴)

完整代码

.hhttps://pastebin.com/trtqw8tc

.cpphttps://pastebin.com/eagbue9e

来源https://pastebin.com/1br5pxze

这几乎是错字。而不是索引

中的name字符串
    if (phoneBook->name[j] > phoneBook->name[j + 1])

您要索引phonebook

    if (phoneBook[j].name > phoneBook[j + 1].name)

最新更新