在 C++ 中更改私有基元变量的值

Changing the value of a private primitive variable in C++

本文关键字:变量 C++      更新时间:2023-10-16
class A {
    private:
        int numberOfElements;
    public:
        A() : numberOfElements(0) {}
        void add() { 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);
}
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 引用,这消除了制作无用副本的需要(