2016-03-03 164 views
0

我想將「boost :: array」傳遞給「booth :: thread」作業。C++ //將Boost :: array傳遞給Boost ::線程

typedef unsigned char BYTE; 
boost::array<BYTE,256> readBuffer; 
thread gojob(&thread_job, readBuffer.data()); 

如何通過它?

void serial::thread_job(BYTE *received) { 

} 

我寫了這..但編譯給我奇怪的消息僅.. 我不明白他在說....

include/boost/bind/mem_fn.hpp:333:36: error: cannot apply member pointer ‘((const boost::_mfi::dm<void(unsigned char*), serial>*)this)->boost::_mfi::dm<void(unsigned char*), serial>::f_’ to ‘* boost::get_pointer<unsigned char>(((unsigned char*)u))’, which is of non-class type ‘unsigned char’ 
+0

[貌似'的boost ::數組::數據()''是const',一件事(http://www.boost.org/ DOC /庫/ 1_60_0/DOC/HTML /升壓/ array.html#idm45507153295488-BB)。所以你試着將'unsigned char const *'傳遞給一個期待'unsigned char *'的函數。通過一個複雜的圖書館,它可以給我們一些奇怪的錯誤,我猜。 – BoBTFish

回答

0

傳遞緩衝區,然後對數據進行工作(),你可以這樣做:

thread gojob(boost::bind(&serial::thread_job,this, boost::ref(readBuffer)) 
+0

我改變這樣的代碼:next error message is「include/boost/bind/mem_fn.hpp:333:36:error:no matching function for call to'get_pointer(const boost :: array &) '「工作功能沒問題? void serial:thread_job(BYTE * received) –

+0

不是,'serial :: thread_job(BYTE * received)'現在變成'serial :: thread_job(boost :: array&received)' –

+0

謝謝。但是我的能力不能寫入下一行...... :(void serial :: thread_job(boost :: array&received){*}如何使用/轉換爲Original boost :: array ?? */ \t BYTE Command = *(received + 2);? –