如何通过 C++ 中构造函数的初始化列表来初始化 class 的私有结构成员?
how can I value initialize private struct member of class via initialization list of constructor in c++?
假设我有一个 POD 类型的结构。
// A.hpp
//struct is of POD type
struct s {
int x;
double y;
};
然后我让这个结构成为 class A
的私有成员
// A.hpp
class A{
s my_struct;
int size;
public:
A(int, double, int);
};
现在我想使用构造函数初始化 class,我还想初始化 my_sruct。
我目前拥有的是
// A.cpp
A::A(int x_, double y_, int size_):my_struct(x_, y_), size(size_){}
// main.cpp
A a( 4, 6.6, 7); // this is how I try to instantiate the object
但我收到错误提示
error: no matching function for call to 's::s(int&, double&)'
我可以通过在 struct 中放置一个构造函数来解决它。但我认为对于 POD,我们不需要这样做。我在这里遗漏了什么吗?
改变这个:
A::A(int x_, double y_, int size_):my_struct(x_, y_), size(size_){}
对此:
A::A(int x_, double y_, int size_):my_struct({x_, y_}), size(size_){}
偶数(没有括号,如 QPaystaxes 所说):
A::A(int x_, double y_, int size_):my_struct{x_, y_}, size(size_){}
最小示例:
struct s {
int x;
double y;
};
class A{
s my_struct;
int size;
public:
A(int, double, int);
};
A::A(int x_, double y_, int size_):my_struct({x_, y_}), size(size_){}
int main() {
A a( 4, 6.6, 7);
return 0;
}
编译:
C02QT2UBFVH6-lm:~ gsamaras$ g++ -std=c++11 main.cpp
C02QT2UBFVH6-lm:~ gsamaras$
否则,你可以按照这个answer。
假设我有一个 POD 类型的结构。
// A.hpp
//struct is of POD type
struct s {
int x;
double y;
};
然后我让这个结构成为 class A
的私有成员// A.hpp
class A{
s my_struct;
int size;
public:
A(int, double, int);
};
现在我想使用构造函数初始化 class,我还想初始化 my_sruct。
我目前拥有的是
// A.cpp
A::A(int x_, double y_, int size_):my_struct(x_, y_), size(size_){}
// main.cpp
A a( 4, 6.6, 7); // this is how I try to instantiate the object
但我收到错误提示
error: no matching function for call to 's::s(int&, double&)'
我可以通过在 struct 中放置一个构造函数来解决它。但我认为对于 POD,我们不需要这样做。我在这里遗漏了什么吗?
改变这个:
A::A(int x_, double y_, int size_):my_struct(x_, y_), size(size_){}
对此:
A::A(int x_, double y_, int size_):my_struct({x_, y_}), size(size_){}
偶数(没有括号,如 QPaystaxes 所说):
A::A(int x_, double y_, int size_):my_struct{x_, y_}, size(size_){}
最小示例:
struct s {
int x;
double y;
};
class A{
s my_struct;
int size;
public:
A(int, double, int);
};
A::A(int x_, double y_, int size_):my_struct({x_, y_}), size(size_){}
int main() {
A a( 4, 6.6, 7);
return 0;
}
编译:
C02QT2UBFVH6-lm:~ gsamaras$ g++ -std=c++11 main.cpp
C02QT2UBFVH6-lm:~ gsamaras$
否则,你可以按照这个answer。