我有一个电影课,其标题为& amp; CPP:
movie.h
#include "book.h"
#include <vector>
class Book;
class movie
{
public:
movie(string aTitle, int aYear);
void fromBook(const Book &b);
string toString() const;
private:
std::vector<Book> book;
};
movie.cpp
#include "movie.h"
#include <sstream>
movie::movie(string aTitle, int aYear):
title{aTitle}, year{aYear}
{
}
void movie::fromBook(const Book &b)
{
book.push_back(b);
}
std::string movie::toString() const
{
stringstream result;
result << "\nA film adaption from the book: " << std::endl;
for (auto a : book)
{
result << "\t" << a;
if (a != *(book.end()-1))
result << ", ";
}
return result.str();
}
出于某种原因,它给了我错误:
error: cannot bind 'std::basic_ostream<char>' lvalue to 'std::basic_ostream<char>&&'
result << "\t" << a;
^
虽然我不明白为什么。
例如,当使用相同的方法打印字符串列表时,我不会收到此错误。
仅供参考:我删除了与之无关的代码。我只跟书的事情有关。 (和原始构造函数)
答案 0 :(得分:1)
编译器找不到operator<<
的{{1}}。
如果标准库
中找到的匹配项最接近Book
其中template<class _CharT, class _TraitsT, class _Ty>
std::basic_ostream<_CharT, _TraitsT>&
operator<<(std::basic_ostream<_CharT, _TraitsT>&& _Stream, const _Ty& _Value);
可能与_Ty
匹配,但您的Book
不是右值,因此与result
参数不匹配。不幸的是,这使得错误消息不够明确。
您应该看到_Stream
有operator<<
,并且它在movie.cpp中可见。