2011-02-28 56 views
1

我在使用Sun Studio編譯器的Solaris上遇到問題,很可能是由於使用了奇怪的STL實現(libCstd),請參閱http://developers.sun.com/solaris/articles/cmp_stlport_libCstd.html。考慮到這一點:solaris上的std :: sort問題(libCstd)

std::vector<C*> v; 
// .. populate the vector 
std::sort(v.begin(), v.end()); 

其中C是一些類。這會產生以下編譯器錯誤消息:

"/opt/sunstudio12.1/prod/include/CC/Cstd/./algorithm", line 725: Error: The operand "*first" cannot be assigned to. 
"/opt/sunstudio12.1/prod/include/CC/Cstd/./algorithm.cc", line 985:  Where: While instantiating "std::__linear_insert<C*const*, C*>(C*const*, C*const*, C**)". 
"/opt/sunstudio12.1/prod/include/CC/Cstd/./algorithm.cc", line 985:  Where: Instantiated from std::__insertion_sort<C*const*>(C*const*, C*const*). 
"/opt/sunstudio12.1/prod/include/CC/Cstd/./algorithm", line 811:  Where: Instantiated from non-template code. 

有沒有人知道如何規避該問題?當然,實際上我想用std::sort與自定義比較仿函數,但即使這個簡單的版本不起作用。

+0

你可以發佈什麼C樣子? – murrekatt 2011-02-28 09:12:38

回答

5

看起來你的實際向量是const。它是一個在const成員函數中訪問的成員變量嗎?它是一個const函數參數嗎?

+0

愚蠢的我。非常感謝!我非常關注'這當然又是這個愚蠢的STL實現'......對於困擾每個人的抱歉。 – lytenyn 2011-02-28 09:37:46

3
#include <algorithm> 
#include <vector> 

struct C {}; 

int main() 
{ 
    std::vector<C*> v; 
    std::sort(v.begin(), v.end()); 
} 

沒有錯誤編譯與

CC: Sun C++ 5.9 SunOS_sparc Patch 124863-19 2009/12/02 

援引爲

CC lytenyn.cpp