1

それで、Stephen Prata の本から C++ を学んでいて、1 つの演習を行いたいと思っています...問題は次のとおりです。

次のようなクラス内で、構造体内で std::valarray を使用したい:

class Wine
{
private:
    struct Pair
    {
        std::valarray<int> valYear;
        std::valarray<int> valBottlesNum;
    };
    int m_yearNum;
    Pair m_numericData;
public:
    Wine();
    Wine(int, const int[], const int[]);
};

そして、メンバー初期化リストを介してこれを初期化します。

Wine::Wine(int yearNum, const int year[], const int bottlesNum[])
    : m_yearNum(yearNum), 
    m_numericData.valYear(yearNum, year), 
    m_numericData.valBottlesNum(yearNum, bottlesNum)
{}

しかし、それはうまくいきたくないだけです。どういうわけか、コンパイラはこの "." を好みません。初期化子リスト内のm_numericData構造体のメンバーにアクセスします。

Pair構造体を放棄して、単純なクラス メンバー変数としてvalYearvalBottlesNumを実行し、次のように初期化することもできます...

Wine::Wine(, int yearNum, const int year[], const int bottlesNum[])
    : m_yearNum(yearNum), m_valYear(yearNum, year), m_valBottlesNum(yearNum, bottlesNum)
{}

しかし、私は本当にこのようなものを解決する方法を知りたい.

よろしくお願いします!

4

2 に答える 2

2

個々の初期化をコンストラクターの本体に移動できます。

Wine::Wine(int yearNum, const int year[], const int bottlesNum[])
    : m_yearNum(yearNum)
{
    m_numericData.valYear = std::valarray<int>(yearNum, year);
    m_numericData.valBottlesNum = std::valarray<int>(yearNum, bottlesNum);
}

または、Pair独自のコンストラクターを指定します。

于 2015-03-25T19:44:29.110 に答える