第一篇文章在这里,但我一直在寻找解决此错误的方法。 我收到错误消息“字符串下标超出范围”
PhoneBook是一个类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()中注释掉它时,它会很好地工作。
这是我的错误图片 (too long to copy and paste)
完整代码
.h https://pastebin.com/TrtQW8Tc
答案 0 :(得分:1)
这几乎是一个错字。代替索引
中的name
字符串
if (phoneBook->name[j] > phoneBook->name[j + 1])
您要索引phonebook
if (phoneBook[j].name > phoneBook[j + 1].name)