2017-11-11 89 views
1

当我使用Boost 1.53.0,我用的发送和接收这样的:的boost :: message_queue ::接收/发送不与最新版本

int i=0; 
msg_queue.send(&i, sizeof(i), 0); 

int number; 
unsigned int priority = 0; 
boost::interprocess::message_queue::size_type recvd_size; 
msg_queue.receive(&number, sizeof(number), recvd_size, priority); 

现在,使用最新的1.65.1版本,我得到一个无效的参数错误,这个问题似乎是的sizeof()

Boost文档没有1.53.0版本1.65.1之间切换。 Message_queue Doc

发送的签名和接收需要SIZE_TYPE我曾经的sizeof(),我试图将它转换为SIZE_TYPE,使用SIZE_TYPE可变,但是在运行时我会遇到一个库错误。

感谢您的帮助了。

编辑: 要将用户的要求,这里是我得到的这取决于什么我尝试不同的错误消息。

#1 attempt: msg_queue.receive(&number, sizeof(number), recvd_size, priority); 
#1 Error at compile time: Invalid arguments 'Canditates are: void send(const void *, ?, unsigned int)' 
#1 Comment: Same error for Message_Queue::Send() 

与之前版本相同的代码,我能够发送和接收值。

+0

什么是完整的,完整的错误消息? –

回答

0

没有看到真正的编译器错误,我认为这个问题是不是priority。它应该通过左值引用传递,但类型不匹配(应该是无符号):

#include <boost/interprocess/ipc/message_queue.hpp> 

namespace bip = boost::interprocess; 

bip::message_queue msg_queue(bip::open_or_create, "bla", 10, 10240); 

int main() { 
    int i=0; 
    msg_queue.send(&i, sizeof(i), 0); 

    int number; 
    unsigned priority = 0; 
    boost::interprocess::message_queue::size_type recvd_size; 
    msg_queue.receive(&number, sizeof(number), recvd_size, priority); 
} 

升压的确没有1.531.65.1但也许你的代码或编译器做之间切换。

看到它Live On Coliru

+0

事实上,当务之急是无符号的,我只是犯了一个错误,而在计算器上书面方式。 “没有看到真正的编译器错误”是什么意思? – vincedjango