错误:‘size_type’不是‘boost::interprocess::message_queue’的成员

Posted

技术标签:

【中文标题】错误:‘size_type’不是‘boost::interprocess::message_queue’的成员【英文标题】:error: ‘size_type’ is not a member of ‘boost::interprocess::message_queue’ 【发布时间】:2014-07-31 06:04:12 【问题描述】:

该程序正在我的朋友系统中正确编译和运行,但是当我尝试在我的系统上执行时,它在以下行显示上述错误。

message_queue::size_type recvd_size;

I am also included the namespace

using namespace boost::interprocess;

我已经安装了最新的 boost 库,使用 sudo apt-get install libboost-all-dev 但编译器再次显示错误消息

【问题讨论】:

愿意分享导致此错误的实际代码吗? "c,c++" 不是实体。 Boost 是一个 C++ 库。如果您不知道您使用的是哪种语言,您将如何使用它? 【参考方案1】:

您的编译器会准确地告诉您哪里出了问题。 boost::interprocess::message_queue 描述为 here 没有 size_type 元素。那里有一些函数返回size_type,所以你可能有兴趣做这样的事情:

int maxMessages = myMessageQueue.get_max_msg();

【讨论】:

是的,但它在其他计算机上工作正常,所以 size_type 是在 message_queue 的命名空间中定义的,但我认为这是链接的问题。【参考方案2】:

可能您需要指定 boost 的标头在哪里。

-I /<path_boost>/include

如果在:

/usr/local/include

您需要此链接。这是因为默认 PATH 没有指定 linux。

如果你打开一个控制台和数字:

echo $PATH

你会看到什么路径是“可见的”。

如果你想修改它:

sudo nano /etc/environment

并将字符串添加到 PATH:

:/usr/local/include

更新 最后一步,注销+登录或者刷新/etc/environment,看here

【讨论】:

在我的系统库文件安装安装在 usr/lib 目录下,即使我已经将 PATH 设置为 usr/lib 也没有执行 你是否在某处重新定义了“size_type”? 顺便说一句,你必须重新加载 /etc/environment,检查更新【参考方案3】:

如果您将其更改为 std::size_t 它将起作用,但我认为有效的方法是遵循 @Velthune 的回答。

【讨论】:

以上是关于错误:‘size_type’不是‘boost::interprocess::message_queue’的成员的主要内容,如果未能解决你的问题,请参考以下文章

size_t 和 size_type的区别

string.size()和size_type

233.C++的size_type是什么数据类型?

std::map::size_type 用于其 value_type 是它自己的 size_type 的 std::map

string::size_type 页73 size_t 页90

size_t和size_type