c++ - 类成员在实例初始化时需要这个指针

标签 c++ initialization class-members

我试图为类 (B) 创建一个成员(A 类的 Prop )。 A 类的这个成员“prop”需要获取在其构造函数中传递的新创建的 B 实例的“this”指针。正如下面的片段 (Snippet 1) 所示。

但是,这在编译时失败并显示错误消息: “预期类型说明符”(从德语翻译)。

我认为这是因为我无法在此上下文中使用 this 指针,但我不想采用代码段 2 的方式并使用指针。这对我来说不切实际。

有什么方法可以接近第一个片段的编码风格吗?

片段 1

class B;

class A
{
public:
    A(B* b) 
    {
       // ...
    };

};

class B 
{
public:
    A prop(this);
};

片段 2

class B;

class A
{
public:
    A(B* b) 
    {
       // ...
    };

};

class B 
{
public:
    B()
    {
       this->prop = new A(this);
    }

    A* prop;
};

编辑:刚刚想出了这个片段,但是当一个类中有很多片段时,它真的不可读。

片段 3

class B;

class A
{
public:
    A(B* b)
    {
       // ...
    };

};

class B 
{
public:
    B() : prop(this) {};

    A prop;
};

非常感谢!
塞巴斯蒂安

最佳答案

您不能在类声明中初始化类成员。正如您在片段 #3 中正确指出的那样 - 成员存在构造函数初始化列表,需要将参数传递给构造函数。

使用初始化列表是最好的方式恕我直言,请注意,成员按照您声明它们的顺序进行初始化,而不是初始化列表中的顺序:

class B 
{
  public:
      B() : prop(this) {};

  A prop;
};

关于c++ - 类成员在实例初始化时需要这个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18971765/

相关文章:

c++ - 仅在 boost::program_options 中的短选项

c++ - 动态结构错误,指针转换

c++ - return {} 和 return Object{} 之间的区别

c++ - 为什么我不能在初始化列表中使用箭头运算符?

c++ - 名称查找和类范围

c++ - 请求 ' ' 中属于 non_clas 的成员 ' ' ... Vtable,链接器错误?

c++ - 是否可以在我的模板类中有一个静态成员变量,而类的用户不必知道它?

.net - 这是在 vb.net 中用 null 初始化字符串的最佳方法

c++ - std::atomic 的默认值是多少?

c++ - 如何在 private 中定义 lambda 函数?