-2

我正在做一个项目,我必须对向量进行排序,但我遇到了一些困难。

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. 无法从 'class std::basic_string,class std::allocator >' 转换为 'const class CService'

我的问题是:

  1. 你如何从另一个类访问私有成员?
  2. 第二个错误究竟是什么意思?我不明白。
4

1 回答 1

4

为了能够对 a 进行排序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);
于 2013-05-12T13:15:06.720 回答