Reputation: 20076
I'm playing around with some boost containers, but I recently came a blockade as I can't seem to define multi_index_container correctly. I'm following an example i grabbed offline but it still gives me and error message:
struct boost::multi_index::global_fun<const node&, int, <error-constant>>
Error: Expression must have a constant value
Here is my declaration:
#define _CRT_SECURE_NO_DEPRECATE
#define _SCL_SECURE_NO_DEPRECATE
#include <boost/config.hpp>
#include <string>
#include <iostream>
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/key_extractors.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/global_fun.hpp>
#include <boost/multi_index/ordered_index.hpp>
using namespace boost::multi_index;
struct node
{
node(std::string da, int in) {
data = da;
numerical = in;
};
std::string data;
int numerical;
};
int main()
{
typedef multi_index_container<
node,
indexed_by<
hashed_unique<
member<node,std::string, &node::data>>,
ordered_non_unique<
global_fun<const node&, int, node::numerical>> //right here, the value numerical errors
>
> node_type;
}
I have a hunch that I'm not including a file for this, but I can't find a solution.
Upvotes: 0
Views: 233
Reputation: 59811
This should do it:
typedef multi_index_container<
node,
indexed_by< hashed_unique< member<node,std::string, &node::data> >
, ordered_non_unique< member<node, int, &node::numerical> >
>
> node_type;
global_fun
expects, well, a gloabl function. &node::numerical
is a member just like &node::data
. You can of course write a function that accepts a node and extracts it, but why would you?
You are also missing the member.hpp
include.
Upvotes: 1