Ни один оператор "<<" не соответствует, но ">>" работает - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть проблема в C ++, из-за которой возникает ошибка "Нет оператора" << "соответствует этим операндам" (при fout << dog). Вот как выглядит мой код: </p>

int FileRepository::addDog(const Dog& dog)
{
    if (this->findDog(dog.getName()) != -1)
        return -1; 
    std::ofstream fout;
    fout.open(this->fileName.c_str(), std::ios_base::app);
    fout << dog;
    fout.close();
    return 0;
}
ostream& operator<<(ostream& outputStream, Dog& dog)
{
    outputStream << dog.name << ", " << dog.breed << ", " << dog.birthDate << ", " << dog.numberOfShots << ", " << dog.photo << ", " << '\n';
    return outputStream;
}

Также я импортировал заголовки и библиотеки Speci c и оператор ">>" работает.

Вот это работает :

void FileRepository::writeVectorToFile(std::vector<Dog> vectorOfDogs)
{
    ofstream fout(this->fileName.c_str());
    for (Dog dog : vectorOfDogs)
        fout << dog;
    fout.close();
}

1 Ответ

6 голосов
/ 12 апреля 2020

В операторе второй параметр не является константной ссылкой

ostream& operator<<(ostream& outputStream, Dog& dog)
{
    outputStream << dog.name << ", " << dog.breed << ", " << dog.birthDate << ", " << dog.numberOfShots << ", " << dog.photo << ", " << '\n';
    return outputStream;
}

, а в функции-члене используется постоянная ссылка на объект.

int FileRepository::addDog(const Dog& dog)

Объявите оператор как

ostream& operator<<(ostream& outputStream, const Dog& dog)
{
    outputStream << dog.name << ", " << dog.breed << ", " << dog.birthDate << ", " << dog.numberOfShots << ", " << dog.photo << ", " << '\n';
    return outputStream;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...