2014-07-26 21 views
0

我在OpenSUSE和Boost 1.55上使用QT-Creator。所需的所有二進制文件都已構建在boost線程中出現「表達式不能用作函數」的錯誤?

該程序很容易測試Boost線程功能。只聲明一個線程。

當生成程序,我有以下錯誤

/home/esys/Documents/Boost/headers/boost/thread/detail/thread.hpp:117: error: expression cannot be used as a function 
       f(); 
       ^

在thread.hpp它看起來像這樣:

void run() 
     { 
      f();// line 117 
     } 

    private: 
     F f; 
    }; 

我很困惑,因爲這個問題似乎是標題本身的代碼不是構建設置的東西!

如何解決這個問題?當然我可以換成另一個Boost版本,但我對這個錯誤很好奇。這是大Boost庫,帥哥!

任何想法,將不勝感激:)

+1

_your_代碼是怎麼樣的? – Scis

+0

看起來像這樣: 'boost :: thread * p = new boost :: thread(「thread1」);' – Tiana987642

+0

'F'的類型是什麼?基於編譯器錯誤,它既不是函數指針也不是帶有函數調用操作符的類型。 「F」碰巧是成員函數指針嗎?顯然,這些不能稱之爲正常功能。 –

回答

3

我可以reproduce your issue,你的線程聲明:

boost::thread *p = new boost::thread("thread1"); 

是無效的:構造函數需要一個可調用(如仿函數),而不是一個string 。 您應該查看boost documentation瞭解更多信息。

(錯誤信息其實是相當明確的:它會告訴你,你的表達_字符串「線程1」 _不贖回)

注:

考慮std::thread作爲替代爲boost::thread,如果你的編譯器支持C++ 11。

+0

愚蠢的我:(謝謝!我將開始尋找增強文件首先然後在互聯網上的教程:( – Tiana987642

相關問題