2013-01-06 174 views
-1

我想爲特定實例的類方法創建一個函數。正如在這個例子中,我想爲this->x創建一個函數。如何將'this'綁定到C++ TR1中的類函數?

class A { 
public: 
    void x(int p) { } 
    void y() { 
    function<void(int)> f = std::tr1::bind(
     &A::x, 
     this, 
     std::tr1::placeholders::_1); 
    } 
}; 

當我試圖編譯這個,我得到了很長的錯誤信息。其中一個可能有一定意義的是note: no known conversion for argument 1 from ‘int’ to ‘int&’

+2

這是GCC 4.7.2上的所有[正常工作](http://liveworkspace.org/code/2Rk5kI$3)。你正在使用哪種編譯器? – chris

+1

*參數1從'int'到'int&'*沒有已知的轉換。哈哈,真是太好笑了!你的編譯器出錯了(或編譯過程)! – Nawaz

+0

謝謝@chris!我在gcc-4.7.1-glibc-2.14.1上。我會用更新的gcc來嘗試。 – woodings

回答

1

最好從TR1(從2006年的非正式提案)遷移到C++ 11,該C++ 11將大部分TR1逐字合併(意味着TR1程序可能已轉換C++ 11如果你只是刪除tr1:: s)。

雖然接口大多相同,但TR1的實現是分開的。所以它基本上是及時凍結的,新的編譯器怪癖可能會導致它崩潰。或者在其他平臺上,它們可能將TR1特性別名轉換爲「本機」C++ 11,這意味着tr1::類可能與實際TR1規範有所不同。

在GCC上,在刪除tr1::後,從標題中刪除tr1/,並在命令行上傳遞-std=c++11

相關問題