2013-03-08 50 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