2017-10-19 120 views
0

只是想出来的基本boost::multi_index例子,接收和错误:升压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_; 
+1

[完整示例](http://www.boost.org/doc/libs/release/libs/mul ti_index/example/basic.cpp)为'employee'实现'operator <<'。 – Praetorian

+0

@Praetorian没有看到。我会检查出来。谢谢 – BAR

回答

1

似乎需要一个实现:

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