2014-09-26 99 views
0

好吧,所以我有一個GroupDB類(組Databse)和嵌套在裏面我有一個組類。 Group類包含兩個包含組名稱和組成員的私有變量。每次用戶創建一個新組時,都會創建一個組對象並將其添加到我的GroupDB類中的組對象的向量中。我正在開發一個函數,讓用戶加入一個特定的組...C++對象引用/訪問

我試圖遍歷這個向量的組對象,並訪問每一個,直到我找到了正確的組,然後我想將用戶添加到組成員的正確組向量中。

下面是相關代碼:

void GroupDB::JoinGroup(string n, string t) { 
     for (vector<Group>::iterator i = groupList.begin(); 
      i != groupList.end(); ++i) 
     { 
      Group g = *i; 
      string x = g.GetName(); 
      if (x == t) 
       i.Join(n, t); 
     } 
} 

我想了解迭代器是如何工作的。
我相信是正確的,但我怎樣實際調用groupList中group對象的Join()函數?

我的繼承人類頭以及:

class GroupDB { 
public: 
    void JoinGroup(string, string); 

private: 
    class Group 
    { 
    public: 
     string GetName(); 
     vector<string> GetMembers(); 
     void Join(string, string); 
     Group(string); 

    private: 
     string name; 
     vector<string> members; 
    }; 

private: 
    vector<Group> groupList; 
}; 
+0

請您[詳細說明您的實際錯誤](http://stackoverflow.com/posts/26069907/edit)多一點請嗎? – 2014-09-27 00:02:30

回答

1

您可以通過幾種方法來完成此操作。

你可以解引用迭代器訪問對象(而且也沒有必要檢查名稱前將它複製):

{ 
    string x = i->GetName(); // The same as (*i).GetName() 
    if (x == t) 
     i->Join(n, t); // The same as (*i).Join(n, t) 
} 

,或者你可以爲了引入新的名稱中使用的參考變量對於向量中的對象而不復制它:

{ 
    Group& g = *i; 
    string x = g.GetName(); 
    if (x == t) 
     g.Join(n, t); 
} 
+0

啊,這只是把它全部點擊在我的頭上。非常感謝! – 2014-09-27 00:19:37

1

在此行i.Join(n, t);你真正嘗試調用該函數的vector<Group>::iterator對象的Join()。爲了獲得希望的行爲,你必須首先取消你的迭代器的引用,這樣你才能調用Group對象的函數。這應該看起來像(*i).Join(n, t);。請注意0​​不起作用。