复制构造函数出错

时间:2013-11-30 05:07:08

标签: c++ copy-constructor

我的标题文件看起来像这样:

class A
{
public:

    A();

    A(A const & other);

private:

class B
{
    public:
    B * child;

    int x;
    int y;

    void copy( B * other);
};

B * root;

void copy( B * other);

};

虽然我的cpp文件是:

A::A()
{
root = NULL;
}

A::A(A const & other)
{
if (other.root == NULL)
{
    root = NULL;
    return;
}

copy(other.root);
}

void A::copy( B * other)
{
if (other == NULL)
    return;

this->x = other->x;
this->y = other->y;

this->child->copy(other->child);
}

然而,当我编译我的代码时,我得到了错误 - 'A类没有名为x'的成员

我猜这是因为'x'是B类的私有成员。是否可以在不改变头文件结构的情况下制作复制构造函数。

2 个答案:

答案 0 :(得分:1)

  

我猜这是因为'x'是B类的成员   私有的。

不,这是因为,正如错误所说,“A类没有名为x的成员”。班级B可以。在函数A::copy中,this是指向A对象的指针,但您尝试通过它访问不存在的成员xy。也许你的意思是:

this->root->x = other->x;
this->root->y = other->y;

答案 1 :(得分:0)

您的代码似乎无法区分属于A的字段和属于B的字段。编写A的拷贝构造函数的正确方法似乎是:

void A::copy( B *other )
{
    this.root = other;
}

为B编写复制构造函数是一个完全不同的问题,但我不确定它是否与此示例相关。