我的标题文件看起来像这样:
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类的私有成员。是否可以在不改变头文件结构的情况下制作复制构造函数。
答案 0 :(得分:1)
我猜这是因为'x'是B类的成员 私有的。
不,这是因为,正如错误所说,“A类没有名为x的成员”。班级B
可以。在函数A::copy
中,this
是指向A
对象的指针,但您尝试通过它访问不存在的成员x
和y
。也许你的意思是:
this->root->x = other->x;
this->root->y = other->y;
答案 1 :(得分:0)
您的代码似乎无法区分属于A
的字段和属于B
的字段。编写A的拷贝构造函数的正确方法似乎是:
void A::copy( B *other )
{
this.root = other;
}
为B编写复制构造函数是一个完全不同的问题,但我不确定它是否与此示例相关。