【问题标题】:No operator "<<" matches but ">>" works没有运算符“<<”匹配但“>>”有效
【发布时间】:2020-07-25 09:49:00
【问题描述】:

我在 C++ 中遇到一个问题,出现“无运算符”

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

我还导入了特定的头文件和库,并且“>>”运算符有效。

它在这里工作:

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

【问题讨论】:

  • 顺便说一句,您也应该在基于范围的循环中使用const Dog&amp;,即for (const Dog&amp; dog : vectorOfDogs),因为目前您正在对向量中的狗进行不必要的复制。 (然后你会得到同样的错误)
  • 这样的问题应该包含minimal reproducible example
  • 向量也被不必要地复制了

标签: c++ file-io stream


【解决方案1】:

在操作符中第二个参数不是常量引用

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)

将操作符声明为like

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多