1

Sun Studio コンパイラを使用して Solaris で問題が発生しました。これは、使用されている奇妙な STL 実装 ( libCstd )が原因である可能性が最も高いです。 http://developers.sun.com/solaris/articles/cmp_stlport_libCstd.htmlを参照してください。このことを考慮:

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はカスタム比較ファンクターを使用したいのですが、この単純なバージョンでも機能しません。

4

2 に答える 2

5

実際のベクトルは const のようです。constメンバー関数でアクセスされるメンバー変数ですか?const関数の引数ですか?

于 2011-02-28T09:13:18.957 に答える
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
于 2011-02-28T09:15:24.987 に答える