编译错误无法绑定&#39; std :: basic_ostream <char>&#39; lvalue to&#39; std :: basic_ostream <char>&amp;&amp;&#39;

时间:2015-12-29 12:06:03

标签: c++ compilation

我有一个电影课,其标题为&amp; 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;
              ^

虽然我不明白为什么。

例如,当使用相同的方法打印字符串列表时,我不会收到此错误。

仅供参考:我删除了与之无关的代码。我只跟书的事情有关。 (和原始构造函数)

1 个答案:

答案 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参数不匹配。不幸的是,这使得错误消息不够明确。

您应该看到_Streamoperator<<,并且它在movie.cpp中可见。