簡體   English   中英

C ++ STL通過一組指針訪問類的成員

[英]C++ STL Accessing Member of Class with a Set of Pointers

我有一組指向以下類的對象的指針:

class name_id {
    public:
        name_id(string name_a, int id_a) { name = name_a; id = id_a; }
        string name;
        int id;
        bool operator<(name_id &);
};

稍后,在填充集合后,我將此集合傳遞給函數並嘗試訪問每個對象的名稱字段:

void print_by_rank(set<name_id *> &nameIdSet, map<int, int> &votesMap)
{
    vector<string> names;
    vector<string>::iterator names_it;

    set<name_id *>::iterator nameIdSet_it;
    for(nameIdSet_it = nameIdSet.begin(); nameIdSet_it != nameIdSet.end(); ++nameIdSet_it)
        //names.push_back(nameIdSet_it->name);
        cout << nameIdSet_it->name << endl;
}

但是,底部的兩行都不會編譯。 我收到以下消息:

g++ -o bobwinner bobwinner.cpp
bobwinner.cpp: In function 'void print_by_rank(std::set<name_id*, std::less<name_id*>, std::allocator<name_id*> >&, std::map<int, int, std::less<int>, std::allocator<std::pair<const int, int> > >&)':
bobwinner.cpp:68: error: request for member 'name' in '* nameIdSet_it.std::_Rb_tree_const_iterator<_Tp>::operator-> [with _Tp = name_id*]()', which is of non-class type 'name_id* const'

我不明白為什么我不能在迭代器上使用箭頭運算符來訪問set元素指向的對象的名稱字段。

您需要取消引用迭代器以獲取指針。 然后,您需要取消引用指針以獲取對象本身。 因此,您可能想要:

cout << (*nameIdSet_it)->name << endl;

您需要取消引用迭代器,並且該迭代器本身為您提供了一個指針,您需要再次取消引用:

(*nameIdSet_it)->name
^^^^^^^^^^^^^^^
  this is a pointer

除了進行編譯之外,您還會感到驚訝,因為指針集沒有由比較器對基礎對象進行排序,因此這可能不會做您認為的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM