2015-09-09 73 views
0

我有一些問題調用一個新線程的函數。該錯誤消息:用新線程C++調用函數,沒有構造函數實例匹配參數列表

2智能感知:(,性病::的reference_wrapper,口岸系統)C:\無構造 「的std ::螺紋::線程」 的實例參數列表 參數類型相匹配Users \ Lew \ Downloads \ Programmers測試(1)\ Start \ ProgTest95 \ ProgTest95.cpp 339 23 ProgTest95

錯誤1錯誤C2661:'std :: thread :: thread':沒有重載的函數需要3個參數c:\用戶\ lew \ downloads \程序員測試(1)\ start \ progtest95 \ progtest95.cpp 339 1 ProgTest95

這裏是我的代碼:

 thread floodThread(FloodFills, std::ref(m_screenDib), mid); //error here 
     FloodFills(&m_screenDib, mid); //this works 

下面是函數我試着撥打:

void FloodFills(CDIB32* scr, CPoint& mid) 

我不明白爲什麼用一個新的線程時,函數重載不能正常工作。

+0

'FloodFills'有另一個過載,或者只有一個? – ForEveR

+0

它有一個其他超載 – user3427689

回答

1

std::ref參考文件的包裝,不是指針。而當你調用函數一樣

FloodFills(&m_screenDib, mid); 

首先參數作爲指針通過。參考!=指針。

而是做

std::thread floodThread(FloodFills, &m_screenDib, mid); 
+0

感謝您的建議,這是我最初試圖做的。同樣的錯誤。 – user3427689

2

std::ref只創建引用包裝,在你的第二個例子,你從m_screenDib建設的指針,但在線程版本 - 沒有。

而且既然你說,它有另一個重載 - 編譯器不能選擇你想要發送到哪個版本的FloodFills。所以,幫助他。

auto flFnc = static_cast<void(*)(CDIB32*, CPoint&)>(FloodFills); 
thread floodThread(flFnc, &m_screenDib, std::ref(mid)); 
+0

你不能轉換爲函數類型;你可能意思是'static_cast (FloodFills)' –

+0

@PiotrSkotnicki是的,你是對的,謝謝。 – ForEveR

相關問題