2013-05-12 15 views
-2

我正在开发一个项目,并且必须对矢量进行排序,但是我面临一些困难。通过访问私有成员对C++中的矢量进行排序

class CService { 
    private: 
     string m_strSeller; 
    public: 
     // Other stuff. 
}; 

class CAnalizeTime : public CService { 
    private: 
     void sortSellerVector() { 
      vector<CService>m_vData; 
      m_vData.push_back(m_strSeller); 
      sort(m_vData.begin(), m_vData.end()); 
     } 
}; 

我让我的void sortSellerVector()功能2个错误:

  1. 无法访问私有成员在类中声明 '内部CService'
  2. 无法从“类的std :: basic_string的转换,类STD: :“到 '常量类内部CService' 分配>

我的问题是:

  1. 如何访问其他课程的私人成员?
  2. 第二个错误究竟意味着什么?我不明白。
+0

你真的想在这里用继承?另外,你在这里有一个'CService'的向量,但是你想'push_back'一个'string'。你究竟想要做什么? – 2013-05-12 13:11:44

+3

分析?听起来很痛苦... – Alnitak 2013-05-12 13:12:19

+0

我删除了继承,但我仍然无法访问私有成员。我必须从CService创建一个向量,并由卖家对其进行分类。 – user2374907 2013-05-12 13:12:35

回答

4

为了能够排序vector<CService>,最简单的方法就是只给CServiceoperator<重载std::sort可以使用的元素进行排序。当然,这operator<超载将有机会获得m_strSeller,如果它是一个成员函数:

class CService { 
    private: 
    string m_strSeller; 
    public: 
    bool operator<(const CService& other) const 
    { 
     return m_strSeller < other.m_strSeller; 
    } 
    /////..... (other stuff) 
}; 

然后,你可以这样做:

vector<CService> vData; 
// Push some CServices into the vector 
sort(vData.begin(), vData.end()); 

的另一种方法是让你给一个比较函数到std::sort使用。你可以把它的CService朋友,所以它可以访问私有成员:

class CService { 
    private: 
    string m_strSeller; 
    public: 
    friend bool compare(const CService&, const CService&); 
    /////..... (other stuff) 
}; 

bool compare(const CService& a, const CService& b) 
{ 
    return a.m_strSeller < b.m_strSeller; 
} 

,你再使用像这样:

vector<CService> vData; 
// Push some CServices into the vector 
sort(vData.begin(), vData.end(), compare); 
+0

我是否改变底部类或不,因为如果我离开它就像这样我得到“未声明的标识符”错误 – user2374907 2013-05-12 13:29:40

+0

@ user2374907我看不到任何理由你需要'CAnalizeTime'类只是'sortSellerVector'函数。尽管如此,你可以保留它,只是没有理由继承它,你应该更新函数体来包含我上面给出的内容。如果这不起作用,请告诉我你的错误。 – 2013-05-12 13:31:29

+0

以及我的项目说,我必须创建这个类,并在里面排序矢量卖家。我说过,如果我离开它像这样:类CAnalizeTime { \t私人: \t \t无效sortSellerVector(){ \t \t \t \t \t \t矢量 m_vData; \t \t \t m_vData.push_back(m_strSeller); \t \t \t sort(m_vData.begin(),m_vData。结束()); \t \t} }; 我得到了我提到的错误 – user2374907 2013-05-12 13:36:07