提升multi_index示例:错误:二进制表达式的操作数无效

Boost multi_index example: error: invalid operands to binary expression

本文关键字:表达式 操作数 无效 二进制 错误 index 示例 提升 multi      更新时间:2023-10-16

只是尝试基本的boost::multi_index示例并接收和错误:

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/identity.hpp>
#include <boost/multi_index/member.hpp>
using namespace boost::multi_index;
struct employee
{
  int id;
  std::string name;
  employee(int id, const std::string &name) : id(id), name(name) {}
  bool operator<(const employee &e) const { return id < e.id; }
};
// define a multiply indexed set with indices by id and name
typedef multi_index_container<
    employee,
    indexed_by<
        // sort by employee::operator<
        ordered_unique<identity<employee> >,
        // sort by less<string> on name
        ordered_non_unique<member<employee, std::string, &employee::name> > > >
    employee_set;
void print_out_by_name(const employee_set &es)
{
  // get a view to index #1 (name)
  const employee_set::nth_index<1>::type &name_index = es.get<1>();
  // use name_index as a regular std::set
  std::copy(
      name_index.begin(), name_index.end(),
      std::ostream_iterator<employee>(std::cout));  // Looks like the problem is here.
}  

收到此错误:

/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iterator:813:28: error: invalid operands to binary expression ('ostream_type' (aka
          'basic_ostream<char, std::__1::char_traits<char> >') and 'const employee')
                *__out_stream_ << __value_;

似乎需要一个实现:

std::ostream &operator<<(std::ostream &os, const employee &obj)
{
  os << obj.id << "/" << obj.name;
  return os;
}