Seb*_*ner 2 c++ initialization class-members
我试图创建一个成员(A类的支柱)到一个类(B).A类的成员"prop"需要获取在其构造函数中传递的新创建的B实例的"this"指针.正如下面的代码段(片段1)所示.
但是,这在编译时失败,并显示错误消息:"预期有类型标记符"(从德语翻译).
我认为这是关于我无法在此上下文中使用this-pointer,但我不想采用Snippet 2的方式并使用指针.这对我来说是不切实际的.
有没有办法实现这个接近第一个片段的编码风格?
片段1
class B;
class A
{
public:
A(B* b)
{
// ...
};
};
class B
{
public:
A prop(this);
};
Run Code Online (Sandbox Code Playgroud)
片段2
class B;
class A
{
public:
A(B* b)
{
// ...
};
};
class B
{
public:
B()
{
this->prop = new A(this);
}
A* prop;
};
Run Code Online (Sandbox Code Playgroud)
编辑:刚刚弄清楚这个片段,但是当它在一个类中有很多时使它真的不可读.
代码段3
class B;
class A
{
public:
A(B* b)
{
// ...
};
};
class B
{
public:
B() : prop(this) {};
A prop;
};
Run Code Online (Sandbox Code Playgroud)
非常感谢!
塞巴斯蒂安
小智 5
您无法在类声明中初始化类成员.正如您在代码段#3中正确指出的那样 - 成员存在构造函数初始化列表,这需要将参数传递给构造函数.
使用初始化列表是IMHO执行此操作的最佳方式,请注意,成员按您声明的顺序初始化,但不是初始化列表中的顺序:
class B
{
public:
B() : prop(this) {};
A prop;
};
Run Code Online (Sandbox Code Playgroud)