2015-09-14 3 views
0
class A { 
    private: 
     int numberOfElements; 

    public: 
     A() : numberOfElements(0) {} 
     void add() { numberOfElements++; } 

Значение numberOfElements остается 0.Изменение значения частной примитивной переменной в C++

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); 
} 
+1

Можете ли вы также показать нам код, который проверяет ваше требование, возможно, это ошибка? – nos

+1

Не было без [mcve] – NathanOliver

+0

@ nos - это мое редактирование, о чем вы просили? Это все места, в которые входит переменная numberOfElements. –

ответ

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 
} 
} 

Вопрос, вероятно, что вы завершения вашей функции поиска раньше, чем хотелось , Ввод инструкции возврата за пределы цикла 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, это устраняет необходимость создания бесполезной копии)

+0

Приносим извинения за использование SO за такую ​​небольшую ошибку. Спасибо. –

+0

Happens. Обратите внимание на информацию о константной ссылке, как это предлагается в комментариях. –

Смежные вопросы