通过成员初始化列表初始化结构
Initializing struct via member initialization list
所以我正在从 Stephen Prata 的书中学习 C++,我想做一个练习...所以问题是这样的:
我想在结构中使用 std::valarray,在 class 中,如下所示:
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 结构并做 valYear 和 valBottlesNum 作为一个简单的 class 成员变量并像这样初始化它们...
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
它自己的构造函数。
您尝试使用的 valarray
constructor 将 T const*
用于数据,并且 std::size_t
参数指示第一个参数指向的数组元素的数量。如果您可以使用 C++11,则将 yearNum
更改为 std::size_t
并且您可以使用 list-initialization,这将聚合初始化 Pair
.
Wine::Wine(std::size_t yearNum, const int year[], const int bottlesNum[])
: m_yearNum(yearNum)
, m_numericData{{year, yearNum}, {bottlesNum, yearNum}}
{}
所以我正在从 Stephen Prata 的书中学习 C++,我想做一个练习...所以问题是这样的:
我想在结构中使用 std::valarray,在 class 中,如下所示:
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 结构并做 valYear 和 valBottlesNum 作为一个简单的 class 成员变量并像这样初始化它们...
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
它自己的构造函数。
您尝试使用的 valarray
constructor 将 T const*
用于数据,并且 std::size_t
参数指示第一个参数指向的数组元素的数量。如果您可以使用 C++11,则将 yearNum
更改为 std::size_t
并且您可以使用 list-initialization,这将聚合初始化 Pair
.
Wine::Wine(std::size_t yearNum, const int year[], const int bottlesNum[])
: m_yearNum(yearNum)
, m_numericData{{year, yearNum}, {bottlesNum, yearNum}}
{}