c++ - 通过成员初始化列表初始化结构体

标签 c++ struct initializer-list valarray

所以我正在从 Stephen Prata 的书中学习 C++,我想做一个练习...所以问题是这样的:

我想在结构体中使用 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)
{}

但我真的很想知道如何解决这种问题。

提前致谢!

最佳答案

您可以将各个初始化移动到构造函数的主体中:

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 提供其自己的构造函数。

关于c++ - 通过成员初始化列表初始化结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29264977/

相关文章:

c++ - PCAP捕获文件头怎么写?

c# - 保存只读结构化数据的最佳 "place"是什么?

c - 在指定符以严格递增的方式初始化元素后元素是否存在?

c++ - 子类查找表

c++ - 现在有没有一种方法可以使用 C++11 中的初始化列表来初始化固定大小的 char 数组?

c++ - [conv]/6中语句 "The expression e is used as a glvalue if and only if the initialization uses it as a glvalue"的确切含义是什么

c++ - 当两个整数 vector 的第一个元素都是负数时,如何正确使用 < 和 > 运算符?

c++ - 这是使用 std::sort() 的最佳方式吗?

c - Malloc 和 Realloc 结构数组

c++ - 让 boost::function 引用我的函数对象