строковый индекс вне диапазона - строковый пузырь - PullRequest
0 голосов
/ 22 марта 2019

Первый пост здесь, но я копался в поисках решения этой ошибки. Я получаю сообщение об ошибке "строковый индекс вне диапазона"

Телефонная книга - это массив указателей на объект класса Contact.

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 ().

Вот картинка моей ошибки (слишком долго для копирования и вставки)

ПОЛНЫЙ КОД

.h https://pastebin.com/TrtQW8Tc

.cpp https://pastebin.com/EaGBUe9e

источник https://pastebin.com/1BR5pXZE

1 Ответ

1 голос
/ 22 марта 2019

Это почти опечатка. Вместо индексации строки name в

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

Вы хотите индексировать phonebook

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