Еще раз о Boost :: multi_index_container, ошибка c3849, что не так с привязкой к int?

У меня есть код ниже, но кажется, что с int int что-то не так, код такой:

struct MyStruct
{
char* firstName;
char* secondName;
int age;
};

typedef composite_key
<MyStruct*,
BOOST_MULTI_INDEX_MEMBER(MyStruct, char*, firstName),
BOOST_MULTI_INDEX_MEMBER(MyStruct, char*, secondName),
BOOST_MULTI_INDEX_MEMBER(MyStruct, int, age)
> comp_key;struct CompareLess
{   // functor for operator<=

static inline int compare(const char* left, const char* right)
{
return strcmp(left, right);
}
inline bool operator()(const char* left, const char* right) const
{   // apply operator<= to operands
return compare(left, right)<0;
}
static inline int compare(const MyStruct* myStruct1, const MyStruct* myStruct2)
{
int result= compare(myStruct1->firstName, myStruct2->firstName);
if(result!=0)
return result;
else
{
return compare(myStruct2->secondName, myStruct2->secondName);
}
}
inline bool operator()(const MyStruct* myStruct1, const MyStruct* myStruct2)
{
return compare(myStruct1, myStruct2)<0;
}
};

typedef multi_index_container
<
MyStruct*,
indexed_by
<
ordered_unique
<
comp_key,
/*CompareLess*/
composite_key_compare
<
CompareLess,
CompareLess,
std::less<int>
>
>
>
> MyContainer;boost::ptr_vector<MyStruct> vec;
MyStruct* struct1=new MyStruct();
struct1->firstName="Michael";
struct1->secondName="Mike";
struct1->age=20;
vec.push_back(struct1);MyContainer myContainer;
myContainer.insert(struct1);
char* first="Michael";
char* second="Mike";
string michael="Michael";
auto it=myContainer.find(boost::make_tuple(michael.c_str(), (const char*)second,20);
if(it!=myContainer.end())
cout << (*it)->age << endl;

Проблема с ‘(boost :: make_tuple (michael.c_str (), (const char *) second), 20)’, и кажется, что он не может принимать ’20’. Ошибка детализации, как показано ниже:

C: \ boost_1_52 \ boost / multi_index / композитный_ключ.hpp (381): ошибка C3849: вызов в стиле функции для выражения типа int потерял бы const и / или volatile квалификаторы для всех 3 доступных перегрузок операторов
1> C: \ boost_1_52 \ boost / multi_index / композитный_ ключ.hpp (380): при компиляции функции-члена шаблона класса ‘bool boost :: multi_index :: detail :: compare_ckey_ckey_normal :: compare (const KeyCons1 &, const Value1 &Const KeyCons2 &, const Value2 &Сравнение &)»

Есть ли способ обойти это?

0

Решение

После исправления тривиальной синтаксической ошибки (пропущенной скобки) и добавления #includeи т. д., вещь работает здесь (MSVC 2012.)

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector