typedef boost::variant<long long,double,string> possibleTypes ;
set<possibleTypes,less<possibleTypes> > ascSet ;
set<possibleTypes,greater<possibleTypes> > descSet ;
當我嘗試編譯時,在某些庫頭文件中出現一堆錯誤。
但是,如果我刪除第三行(與descSet
一)代碼編譯就好了。std :: set填充boost :: variant元素不能被排序後代?
有什麼問題?無法提升::變體對象按子序排列?
編輯:
我使用Visual Studio 2005和Boost 1.38.0和以下命令行:
cl /EHsc /I"C:\boost_1_38_0" test.cpp
EDIT2 至於有人建議,由Doug T,如果我這個定義:
bool operator>(const possibleTypes& a, const possibleTypes& b){
return b < a ;
}
然後將以下代碼不能編譯:
possibleTypes pt1="a", pt2="b" ;
greater<possibleTypes> func ;
cout << func(pt1,pt2) << endl ;
然而,這個代碼編譯就好:
possibleTypes pt1="a", pt2="b" ;
cout << (pt1 > pt2) << endl ;
誰能幫助我瞭解爲什麼?
我試着用VC++ 2005和GCC 3.4.6
你正在使用哪個版本的Boost?我只是用1.38.0和VC++ 9.0來測試你的代碼,它沒有任何問題編譯。 – Ferruccio 2009-04-14 20:11:19
真的嗎?它必須是複印機版本(我剛更新了我的文章) – GetFree 2009-04-14 20:15:55
你能提供至少第一個錯誤信息嗎?即關於聲明本身的那些,而不是由descSet被不正確定義的結果。 – MSalters 2009-04-15 09:03:44