class A {
private:
int numberOfElements;
public:
A() : numberOfElements(0) {}
void add() { numberOfElements++; }
numberOfElements的值仍为0。
void PhoneBook::add(std::string name, std::string phoneNumber) {
entries[numberOfElements] = Entry(name, phoneNumber);
numberOfElements++;
}
这是应该在我的应用程序中增加变量的实际代码。 A类只是我原始类的样本。
std::string PhoneBook::find(std::string name) {
for(int i = 0; i < numberOfElements; ++i) {
std::cout << i << std::endl;
if(entries[i].getName().compare(name) == 0) {
return entries[i].getPhoneNumber();
}
return "Name not found";
}
}
我打印出i的值,看它是什么,它仍然是0。
void PhoneBook::add(std::string name, std::string phoneNumber) {
entries[numberOfElements] = Entry(name, phoneNumber);
numberOfElements++;
}
std::ifstream in;
in.open("phonebook.txt");
while(in >> name && in >> phoneNumber) {
book.add(name, phoneNumber);
}
答案 0 :(得分:2)
std::string PhoneBook::find(std::string name) {
for(int i = 0; i < numberOfElements; ++i) {
std::cout << i << std::endl;
if(entries[i].getName().compare(name) == 0) {
return entries[i].getPhoneNumber();
}
// end of if, still in the loop
return "Name not found";
// we never get past this, so the loop will
// run no more than a single time
}
}
问题可能是您提前终止了查找功能。将return语句放在for循环之外应该解决这个问题:
std::string PhoneBook::find(std::string const & name) {
for(int i = 0; i < numberOfElements; ++i) {
std::cout << i << std::endl;
if(entries[i].getName().compare(name) == 0) {
return entries[i].getPhoneNumber();
}
}
return "Name not found";
}
请注意,我更改了缩进。明确缩进代码有助于防止此类错误。 (我还更改了接受const引用的函数,这样就无需复制了这些内容)