2013-05-12 2 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() 기능에이 오류를 받고 있어요 :

  1. 개인 회원이 클래스에서 선언에 액세스 할 수 없습니다 'CService'클래스 표준 : : basic_string '에서 변환 할 수 없습니다
  2. , 클래스 표준 : : CONST 클래스 CService ''에서 '할당>을

내 질문은 다음과 같습니다

  1. 다른 클래스의 비공개 멤버에게 어떻게 액세스합니까?
  2. 두 번째 오류는 정확히 무엇을 의미합니까? 나는 그것을 이해하지 못한다.
+0

은 당신이 정말로 여기에 상속을 사용 하시겠습니까는 private 멤버에 액세스 할 수 있도록 당신은 CService의 친구 만들 수 있습니까? 또한, 여기에는'CService'의 벡터가 있습니다. 그러나'string'을'push_back '하려고합니다. 너 정확히 뭘 하려구? –

+3

Analize? 고통 스럽겠지만 ... – Alnitak

+0

상속을 제거했지만 여전히 개인 회원에 액세스 할 수 없습니다. CService에서 벡터를 만들고 판매자별로 정렬해야합니다. – user2374907

답변

4

것은 vector<CService>을 정렬 할 수 있으려면, 가장 쉬운 방법은 CService에게 std::sort이 요소를 정렬하는 데 사용할 수있는 operator< 과부하를 제공하는 것입니다. 이 멤버 함수 인 경우 물론,이 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.

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

+0

@ user2374907'sortSellerVector' 함수에 대해 'CAnalizeTime' 클래스가 필요한 이유가 없습니다. 그럼에도 불구하고 계속 유지할 수 있습니다. 상속해야 할 이유가 없습니다. 함수 본문을 업데이트하여 위에서 제공 한 내용을 포함해야합니다. 이 방법으로 해결되지 않으면 오류를 알려주십시오. –

+0

글쎄, 내 프로젝트는이 클래스를 생성해야하고 내부에서 벡터를 판매자별로 정렬해야한다고 말한다. { \t 개인 클래스 CAnalizeTime : 그리고 나는 이런 식으로두면 말했듯이 \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