2

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

但是,这在编译时失败并显示错误消息:“A typespecifier was expected”(翻译自德语)。

我认为这是关于我无法在这种情况下使用 this 指针,但我不想走Snippet 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;
};

非常感谢!
塞巴斯蒂安

4

2 回答 2

5

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

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

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

  A prop;
};
于 2013-09-24T02:03:40.787 回答
2

我现在自己得到了解决方案。

对于非实验性;非 c++11 标准,luri Covalisin 是对的。

但是如果我们看一下 c++11,我们可以这样做:

class B;

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

};

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

这看起来有点奇怪,但更像是我想要的。

于 2013-09-24T02:11:22.223 回答