0

myNamespaceという名前空間に(次のように)テンプレート関数があります。

template <typename setX>
void getRandomItems(NaturalNumber size, setX &random, setX &items)
{
    assert(size <= items.size());

    //set of randomly selected indices for items
    set<NaturalNumber> index;
    NaturalNumber r, i;

    while(index.size() < size)
    {
        r = unifRand(0,items.size()-1);
        index.insert(r);
    }

    typename setX::iterator it, sit = items.begin();
    for(i = 0, it = index.begin(); it != index.end(); it ++)
    {
        //find the r-th elt in index
        r = *it;
        for(; i < r; i ++)
            sit++;

        random.insert(*sit);
    }
}

ただし、この関数を呼び出すと、次のエラーが発生します。

generic.h:関数'void myNamespace :: getRandomItems(NaturalNumber、setX&、setX&)[with setX = std :: set <std :: basic_string <char>>、NaturalNumber = long unsigned int]':
合成グラフ.C:87:55:ここからインスタンス化
generic.h:74:32:エラー:「operator=」に一致しない'it = index.std :: set :: begin [with _Key = long unsigned int、_Compare = std :: less <long unsigned int>、 _Alloc = std :: allocator <long unsigned int>、std :: set <_Key、_Compare、_Alloc> :: iterator = std :: _ Rb_tree_const_iterator <long unsigned int>]() '
/usr/include/c++/4.5/bits/stl_tree.h:224:5:注:候補は次のとおりです:std :: _ Rb_tree_const_iterator <std :: basic_string <char>>&std :: _ Rb_tree_const_iterator <std :: basic_string <char> > :: operator =(const std :: _ Rb_tree_const_iterator <std :: basic_string <char>>&)
合成グラフ.C:87:55:ここからインスタンス化
generic.h:74:32:エラー:'演算子!='に一致しません!= index.std :: set <_Key、_Compare、_Alloc> :: end [with _Key = long unsigned int、_Compare = std :: less <long unsigned int>、_ Alloc = std :: allocator <long unsigned int>、std :: set <_Key、_Compare、_Alloc> :: iterator = std :: _ Rb_tree_const_iterator <long unsigned int>]() '
/usr/include/c++/4.5/bits/stl_tree.h:291:7:注:候補は:bool std :: _ Rb_tree_const_iterator <_Tp> :: operator!=(const std :: _ Rb_tree_const_iterator <_Tp> :: _ Self&) const [with _Tp = std :: basic_string <char>、std :: _ Rb_tree_const_iterator <_Tp> :: _ Self = std :: _ Rb_tree_const_iterator <std :: basic_string <char>>]
generic.h:77:4:エラー:割り当てで「conststd ::basic_string<char>」を「NaturalNumber」に変換できません

私はすべての組み合わせを試しましたが、運がありません、助けてください!!!

4

2 に答える 2

1

setXは s のセットではないNaturalNumberため、 と言うとイテレータは互換性がありませんit = index.begin()it代わりにイテレータを作成することもできますがset<NaturalNumber>、ここで本当に何をしたいのかわかりません。

sitまた、内側のループでは、セットの最後から実行されないようにするためのチェックを行っていないことに気付きました。

于 2011-07-11T21:51:54.143 に答える