在我的对象状态中,我想要对象pq。但是pq需要用参数初始化。有没有办法将依赖于参数的类包含在另一个类中?
file.h
class Pq { int a; Pq(ClassB b); }; class State { ClassB b2; Pq pq(b2); State(ClassB b3); };
file.cc
State::State(ClassB b3) : b2(b3) {}
答案 0 :(得分:2)
您可以在初始化列表中对其进行初始化,就像使用b2
一样:
State::State(ClassB b3) : b2(b3), pq(b2) {}
请记住,成员按头文件中声明的顺序进行初始化,而不是初始化列表中初始值设定项的顺序。
您还需要删除在标题中初始化它的尝试:
class Pq
{
int a;
Pq(ClassB b);
};
class State
{
ClassB b2;
Pq pq;
State(ClassB b3);
};
答案 1 :(得分:1)
Class State{
public:
State(ClassB& bref):b2(bref),pq(b2){} // Depends on the order you declare objects
// in private/public/protected
private:
ClassB b2;
Pq pq;
};
在上面的代码中,您必须在初始化列表中维护该顺序,否则您将获得不期望的内容。因此风险很大