2017-11-11 2 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