2014-09-26 79 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​​不起作用。