Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 5

Ошибки при использовании boost::multi_index

11.01.2014, 11:58. Показов 1877. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Возникла необходимость воспользоваться boost::multi_index.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
 
using boost::multi_index_container;
using namespace boost::multi_index;
 
struct from{};
struct to{};
 
template<typename FromType,typename ToType>
struct bidirectional_map
{
    typedef std::pair<FromType,ToType> value_type;
 
    typedef multi_index_container<
        value_type,
        indexed_by<
        ordered_non_unique<
        tag<from>, member<value_type,FromType,&value_type::first> >,
        ordered_non_unique<
        tag<to>, member<value_type,ToType,&value_type::second> >
        >
    > type;
};
 
typedef bidirectional_map<int,int>::type dictionary;
 
int main()
{
    dictionary my_map;
 
    return 0;
}
При компиляции в VS2012 все хорошо, а при компиляции в VS2010 получаю ошибки:

1>main.cpp(20): error C2440: 'specialization' : cannot convert from 'int std::_Pair_base<_Ty1,_Ty2>::* ' to 'int std:air<_Ty1,_Ty2>::* '
1> with
1> [
1> _Ty1=int,
1> _Ty2=int
1> ]
1> Standard conversion from pointer-to-member of base to pointer-to-member of derived is not applied for template arguments
1> main.cpp(27) : see reference to class template instantiation 'bidirectional_map<FromType,ToType>' being compiled
1> with
1> [
1> FromType=int,
1> ToType=int
1> ]
В гугле нашлась информация, что это баг студии 2010.

http://connect.microsoft.com/V... f-std-pair

Я не смогу воспользоватся boost::multi_index без смены студии? Есть способы заставить работать на VS2010?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.01.2014, 11:58
Ответы с готовыми решениями:

Ошибка при использовании boost::regex
На строке: boost::regex xRegEx(&quot;(\\w+)-(\\d+)-(\\w+)-(\\d+)&quot;); Возникают ошибки: sp_convertible.hpp(48): E2514 Cannot (yet) use...

Ошибки при компилировании примера boost
#include &lt;iostream&gt; #include &lt;boost/asio.hpp&gt; #include &lt;boost/date_time/posix_time/posix_time.hpp&gt; using namespace std; int main() ...

Синтаксические ошибки при сборке проекта с использованием Boost.Asio
Логи 1&gt;------ Build started: Project: ConsoleApplication4, Configuration: Debug Win32 ------ 1&gt;Build started 16.04.2016 12:52:04. ...

10
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
11.01.2014, 18:18
присоеднюсь к вопросу..
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
11.01.2014, 19:07
Цитата Сообщение от Adell Посмотреть сообщение
Я не смогу воспользоватся boost::multi_index без смены студии?
Да, студию придется сменить. А заодно переустановить Windows

Такой вариант не рассматриваете ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template<typename FromType,typename ToType>
struct bidirectional_map
{
    // typedef std::pair<FromType,ToType> value_type;
 
    struct mystruct
    {
        FromType    first;
        ToType      second;
    };
    
    typedef mystruct value_type;
 
    typedef multi_index_container<
        value_type,
        indexed_by<
        ordered_non_unique<
        tag<from>, member<value_type,FromType,&value_type::first> >,
        ordered_non_unique<
        tag<to>, member<value_type,ToType,&value_type::second> >
        >
    > type;
};
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
11.01.2014, 19:28
Убежденный, если вдруг у автора будет работать этот вариант, но не работает pair - как такое возможно? В смысле, в чем между ними разница, кроме пронстранста имен? Оба структуры, просто pair более "навороченная"..
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
11.01.2014, 19:32
std::pair из Visual C++ унаследована от _Pair_base, где ее члены и хранятся.
Из-за этого код и не работает, т.к. компилятор не может привести указатель
на член производного класса к указателю на член базового.
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
11.01.2014, 19:38
Убежденный, а как же полиморфизм? О_о
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
11.01.2014, 19:40
А что полиморфизм ?
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
11.01.2014, 19:55
Убежденный, ну в чем проблема привести указатель .. стоп.. член производного к члену базового? Это как вообще? О_о
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
11.01.2014, 20:13
Цитата Сообщение от Убежденный Посмотреть сообщение
member<value_type,FromType,&value_type:: first>
nexen, Видимо в этом дело (сам не знаю, но больше не к чему прикопаться)
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
11.01.2014, 22:38
Лучший ответ Сообщение было отмечено как решение

Решение

Упрощенно, здесь происходит вот что:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct parent
{
    int Value;
};
 
struct child : public parent
{
};
 
template <typename T_Class, typename T_Type, T_Type T_Class::*pMember>
struct member
{
};
 
 
 
int main()
{
    member<child, int, &child::Value> Test;
    return 0;
}
parent - это базовый класс, хранящий данные (Value), а child - его наследник.
member - это шаблон, который параметризируется указателем на член данных любого класса.

Тип "&child::Value" - это указатель на член Value класса child. Но поскольку в самом child
никакого Value нету, этот указатель неявно конвертируется в базовый - "&parent::Value".
Следовательно, когда объявляется Test, его шаблонные параметры задаются так:
C++
1
member<child, int, &parent::Value>
И это не соответствует сигнатуре шаблона: T_Class = child, T_Type = int, T_Class::*pMember =
&parent::Value, а должно быть &child::Value.

По стандарту языка, указатель на член класса может быть неявно сконвертирован из базового
типа в производный, при условии, что базовый класс доступен и отсутствует неоднозначность, а
сам базовый класс наследуется не виртуально (C++03, 4.11.2).
Но это шаблон, а для аргументов шаблона действуют особые правила конверсии.
В частности, про указатель на член данных класса говорится, что в этом случае возможно
только конвертирование из менее квалифицированного в более квалифицированный тип, т.е. из
указателя на child::int в указатель на child::const int, например (С++03, 14.3.2.5).

Если parent можно заменить на std::_Pair_base, child - на std::pair, а member - на
boost::multi_index::member, то получим исходную картину.
4
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 5
12.01.2014, 01:56  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Такой вариант не рассматриваете ?
Спасибо большое. Работает!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.01.2014, 01:56
Помогаю со студенческими работами здесь

Использую boost в eclipse: ошибки в самой библиотеке
Скачал boost из офф. сайта установил все как надо. В eclipse указал пути к инклудам и к либам. При подключение библиотек, все...

Ошибки при созадании dataGridView с группировкой в столбцах при использовании CellFormatting
Всем привет!!!! Помогите пожалуйста разобраться. Использую наследование от dataGridView и обработка события CellFormatting. Не могу...

Ошибки при использовании Сomponentone
Когда я запускаю сайт с любым компонентом componentone, то получаю ошибки: Ошибка 1 Тип 'C1.Web.UI.Controls.C1Editor.C1Editor'...

Ошибки при использовании stringstream
Текст программы: #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; int main()...

Ошибки при использовании конструкции if-else.
Всех с наступающим! Ребята, подскажите в чем ошибка?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru