2013-03-08 76 views
-1

嗨,这是我的第一个话题。我在C++以下情况:副本父指针没有副本在儿童

class A; 
class Child; 
class Parent; 

class A 
{ 
public: 
    Parent *_p; 
    A() {} 
}; 

class Parent 
{ 
public: 
    void add(A &a) { a._p = this; } 
    Parent() {} 
}; 

class Child : public Parent 
{ 
public: 
    A a; 
    Child() : Parent() { add(a); } 
}; 

主要是相当简单:

int main(int argc, char *argv[ ]) 
{ 
    Child c1,c2; 
    c2=c1; 
    return 0; 
} 

目前c2.a._pc1.a._p相同的地址(我做了一个副本)。我想修改A和/或父母以便用正确的父母更新指针_p。我无法改变孩子,这是我的问题的严重局限性。

有什么想法?可能吗?

+1

请发表[至少编译的代码](http://liveworkspace.org/code/4AsSri$0)。你发布的内容无效。 – 2013-03-08 09:07:23

+0

_p未在父级中声明。它是A的成员,并且必须通过A的对象在A类中调用,你在用_p做什么? – 2013-03-08 09:20:53

+0

对不起,我更正了代码中的拼写错误。现在编译。我想用'_p'来访问A中Parent的方法。 – Gobboshow 2013-03-08 09:46:38

回答

0

c2=c1一样,很明显c2.a._p的地址与c1.a._p的地址相同。基本上你知道c2应该是c1!

更新:给你的评论,那么你应该这样做。这有点难看,但我仍然没有全面了解你想要达到的目标以及班级孩子为什么不能修改。这是某种伪C++代码。

Parent c1; 
Child c2, ....; 
c2.a._p = &c1; 
+0

我有一个主对象'c1',我想声明N个副本('c2 - > cN')。所有元素必须等于'c1',但我需要更新poiter'_p'来更正Parent。 我知道标准拷贝('c2 = c1')是不够的。我想丰富Parent或A类来定义一个能够更新'_p'的新副本。 – Gobboshow 2013-03-08 11:50:23

+0

对不起,我无法解释这个问题:'c1'是Child,'c2.a'在复制后应该有'c2'的地址。我只能写出问题中写的main('c2 = c1')。我会尽快通过更多信息更新问题。谢谢 – Gobboshow 2013-03-08 13:36:26