-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. 2番目のエラーは正確にはどういう意味ですか? わかりません。
4

1 に答える 1

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::sortCServiceプライベート メンバーにアクセスできるように、それを のフレンドにすることができます。

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 に答える