2013-10-08 2 views
0

Я работаю с STXXL, и я столкнулся с проблемой с картами, наследующими от boost :: noncopyable ... Для этого проекта я создаю несколько карт с помощью заявление:Ускорить ошибку при копировании STXXL

stxxl::map<int, mapData, CmpIntGreater, 4096, 4096> node_map((stxxl::unsigned_type)(4096 * 4), (stxxl::unsigned_type)(4096 * 3));

Излишне говорить, что трудно закодированные значения в конструкторе будут заменены, как только я решить эту проблему, но в любом случае, я получаю ошибку:

C2248: 'boost::noncopyable_::noncopyable::noncopyable' : cannot access private member declared in class 'boost::noncopyable_::noncopyable'

Кто-нибудь еще столкнулся с этой проблемой с картами STXXL? Или у кого-нибудь есть общие рекомендации или рекомендации при работе с не подлежащими копированию объектами?

Спасибо за вашу помощь, ребята :)

+0

Как и компилятор, вы пытаетесь скопировать не скопируемый объект (например, передавая/возвращая его по значению или используя назначение). Покажите соответствующий код. –

+0

К сожалению, компилятор не указывает на строку в моем коде, а скорее на строку в коде STXXL map.h (строка 363, в основном прямо в конце определения класса карты, поэтому довольно бесполезно). Я предполагаю, что хочу убедиться в том, будет ли это мой экземпляр, который я показал выше, что вызывает эту ошибку, или это будет где-то еще в моем коде. Пока это не мое создание, я уверен, что могу найти ошибку :) – Andrewziac

+1

Определение объекта node_map выглядит нормально. Ищите места, где вы передаете значение по значению функции. Или, может быть, это член другого объекта, который вы забыли сделать явно не скопированным. –

ответ

0

Просто, чтобы добавить официальный ответ здесь, чтобы принять, моя проблема в том, что у меня были некоторые функции, возвращающие карты по значению и некоторые аргументы функции передается по значению. Как только это было исправлено, он работал как шарм! Итак, мораль этой истории, при использовании версии STXXL, которая наследуется от noncopyable, убедитесь, что все экземпляры вашего объекта STXXL используются с вашими функциями только по ссылке, а не по значению.

Смежные вопросы