Мой сеттер может получить параметры, но на самом деле не может? - PullRequest
0 голосов
/ 14 апреля 2019

Так что я делаю какой-то реестр, который хранит информацию о людях. Моя проблема в том, что у меня есть класс, в котором есть несколько сеттеров и геттеров для человека (имя, дата рождения, место рождения и т. Д.). И когда я пытаюсь прочитать информацию из текстового файла, я не могу дать установщикам параметры, которые я получил из файла.

Я создал файл, в котором я пытаюсь выяснить проблему, но я никуда не могу добраться. Цикл не имеет значения, если то, что я пытаюсь сделать, не в цикле и в файле есть только одна строка, проблема остается той же

int main(){
    std::string firstName;
    std::string lastName;
    std::string phoneNumber;
    std::string birthPlace;
    std::string birthDate;
    std::string Profession;

     Contacts newContact = Contacts();


    std::ifstream savedContacts("ContactList.txt");

    do{
        std::getline(savedContacts, firstName, ';');
        std::getline(savedContacts, lastName, ';');
        std::getline(savedContacts, phoneNumber, ';');
        std::getline(savedContacts, birthPlace, ';');
        std::getline(savedContacts, birthDate, ';');
        std::getline(savedContacts, Profession, ';');
 /* 
 in this case, this setter doesn't work,
 it doesn't get the string stored in firstName,after this,the program 
 crashes
 */
        newContact.setFirstname(firstName);
        std::cout<<newContact.getFirstname();

/*
and just to make sure that the reading of the file was successful
if i print out one of these strings, like this, it works perfectly 
*/
 std::cout<<firstName;
    }while(std::getline(savedContacts, firstName));

Самое смешное, что если я сделаю это: newContact.setFirstname ( "Карен"); тогда сеттер работает отлично, а также мой геттер

так выглядят мои сеттеры и геттеры в моем классе контактов

    std::string Contacts::setFirstname(std::string firstName) {
    this->firstName = firstName;
}

std::string Contacts::getFirstname() {
    return firstName;
}

И это внутри txt файла:

John;Wick;1800181819;Paris;11.09.1990;Plumber;
Anthony;Joshua;192918180;Manchester;10.08.1994;Teacher;

1 Ответ

0 голосов
/ 14 апреля 2019
// Several issues here:
std::string Contacts::setFirstname(std::string firstName) {
    this->firstName = firstName;
}

// Don't return a copy. Setters will usually only *set*
// If you WANT to return the value, you should NOT return a copy
// but a reference or a const reference
// You are copying AGAIN for the argument; take a const reference
// And probably avoid a copy
// Change parameter name and you could spare the this->
// and return a value; you declared a return type but no return statement
// Which means the code you posted doesn't compile
const std::string& Contacts::setFirstname(const std::string& newFirstName) 
{
    firstName = newFirstName;
    return firstName;
}

// Same here, return const reference and let the caller copy only if needed
// And make the getter const so it can work with const Contact
const std::string& Contacts::getFirstname() const {
    return firstName;
}

Также, о вашей проблеме, скорее всего, в коде, который вызывает setFirstName.Который вы не предоставили.Пожалуйста, предоставьте Минимальный, полный и проверяемый пример

...