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()); 
     } 
}; 

Я получаю 2 ошибки на моей void sortSellerVector() функции:

  1. не удается получить доступ к частным член объявлен в классе 'CService'
  2. Не удается преобразовать из «класса станд :: basic_string, класс станд: : распределитель>»до 'сопзЬ класса CService'

Мои вопросы:

  1. Как вы можете получить доступ к закрытому члену другого класса?
  2. Что означает вторая ошибка? Я этого не понимаю.
+0

Вы действительно хотите использовать наследование здесь? Кроме того, у вас есть вектор 'CService' здесь, но вы пытаетесь 'push_back'' string'. Что именно ты пытаешься сделать? –

+3

Анализировать? Звуки болезненные ... – Alnitak

+0

Я удалил наследование, но я до сих пор не могу получить доступ к частному члену. Я должен создать вектор из CService и отсортировать его продавцами. – user2374907

ответ

4

Чтобы иметь возможность сортировать vector<CService>, самый простой способ, чтобы просто дать CService в operator< перегрузку, 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

+0

@ user2374907 Я не вижу причины, по которой вам нужен класс CAnalizeTime для функции 'sortSellerVector'. Тем не менее, вы можете сохранить его, просто нет причин для его наследования, и вы должны обновить тело функции, чтобы содержать то, что я дал выше. Если это не сработает, сообщите мне свою ошибку. –

+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

 Смежные вопросы

  • Нет связанных вопросов^_^