ошибка: ‘size_type’ не является членом ‘boost::interprocess::message_queue’

Программа компилируется и работает в системе моих друзей правильно, но когда я пытаюсь выполнить ее в своей системе, в следующей строке отображается указанная выше ошибка.

message_queue::size_type recvd_size;

I am also included the namespace

using namespace boost::interprocess;

Я установил последнюю библиотеку boost, используя sudo apt-get install libboost-all-dev, но снова компилятор показывает сообщение об ошибке как error: ‘size_type’ не является членом ‘boost::interprocess::message_queue’


person VenkatKrishna    schedule 31.07.2014    source источник
comment
Хотите поделиться фактическим кодом, который вызывает эту ошибку?   -  person user657267    schedule 31.07.2014
comment
c, c++ не является сущностью. Boost — это библиотека C++. Если вы не знаете, какой язык вы используете, как вы собираетесь его использовать?   -  person n. 1.8e9-where's-my-share m.    schedule 31.07.2014


Ответы (3)


Ваш компилятор говорит вам, что именно не так. boost::interprocess::message_queue как описано здесь не имеет элемента size_type. Там есть несколько функций, которые возвращают size_type, поэтому вам может быть интересно сделать что-то вроде этого:

int maxMessages = myMessageQueue.get_max_msg();
person Fantastic Mr Fox    schedule 31.07.2014
comment
да, но он отлично работает на другом компьютере, поэтому size_type определен в пространстве имен message_queue, но я думаю, что это проблема связывания. - person Ali786; 31.07.2014

Вероятно, вам нужно указать, где находятся заголовки boost.

-I /<path_boost>/include

Если это в:

/usr/local/include

Вам нужна эта ссылка. Это потому, что по умолчанию PATH в linux не указан.

Если вы откроете консоль и наберете:

echo $PATH

вы увидите, какой путь «видим».

Если вы хотите изменить его:

sudo nano /etc/environment

И добавьте в PATH строку:

:/usr/local/include

ОБНОВЛЕНИЕ
Последний шаг, выход из системы + вход в систему или обновление /etc/environment, см. здесь.

person Luca Davanzo    schedule 31.07.2014
comment
В моей системной библиотеке файлы установлены в каталоге usr/lib. Несмотря на то, что я установил PATH в usr/lib, он не выполняется - person VenkatKrishna; 31.07.2014
comment
Вы где-то переопределили size_type? - person Luca Davanzo; 31.07.2014
comment
Кстати, вам нужно перезагрузить /etc/environment, проверить обновление - person Luca Davanzo; 12.11.2014

Если вы измените его на std::size_t, это сработает, но я думаю, что эффективный способ - следовать ответу @Velthune.

person Ali786    schedule 31.07.2014