2013-05-12 16 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