2012-01-30 82 views
0

我有兩個班,class Aclass B在C++中,我希望兩個類互相訪問

A.h -> A.cpp 
B.h -> B.cpp 

然後,我集B爲A類成員之後,A類可以通過

#include <B.h> 

訪問B類但是,我怎麼能得到A類的指針B類並訪問A類公共成員?

我在互聯網上發現了一些信息:一個跨班級。他們說你可以通過設置B類爲A類

你有任何其他建議嵌套類做的?

對不起。 mycode的:爲遵循..

class A: 

#ifndef A 
#define A 

#include "B.h" 

class A 
{ 
public: 
    A() { 
     b = new B(this); 
    } 

private: 
    B* b; 
}; 

#endif 


#ifndef B 
#define B 

#include"A.h" 

class B 
{ 
public: 
    B(A* parent = 0) { 
     this->parent = parent; 
    } 

private: 
    A* parent; 
}; 

#endif 
+0

你最終想要實現什麼? – wilhelmtell 2012-01-30 05:41:51

+4

請發佈一些相關的代碼。 – 2012-01-30 05:42:03

+0

第二次它應該讀作'B類',而不是'A',對吧?否則,無論如何它都是一種重新定義,即錯誤。 – vines 2012-01-30 06:03:59

回答

6

只需使用forward declaration。像:

A.H:

#ifndef A_h 
#define A_h 

class B; // B forward-declaration 

class A // A definition 
{ 
public: 
    B * pb; // legal, we don't need B's definition to declare a pointer to B 
    B b; // illegal! B is an incomplete type here 
    void method(); 
}; 

#endif 

B.h:

#ifndef B_h 
#define B_h 

#include "A.h" // including definition of A 

class B // definition of B 
{ 
public: 
    A * pa; // legal, pointer is always a pointer 
    A a; // legal too, since we've included A's *definition* already 
    void method(); 
}; 

#endif 

A.cpp

#inlude "A.h" 
#incude "B.h" 

A::method() 
{ 
    pb->method(); // we've included the definition of B already, 
        // and now we can access its members via the pointer. 
} 

B.cpp

#inlude "A.h" 
#incude "B.h" 

B::method() 
{ 
    pa->method(); // we've included the definition of A already 
    a.method(); // ...or like this, if we want B to own an instance of A, 
        // rather than just refer to it by a pointer. 
} 

知道B is a class足以讓編譯器定義pointer to B,無論B是什麼。當然,.cpp文件應包括A.hB.h以便能夠訪問類成員。

+0

謝謝..但是,如果我將訪問類A中的B類?我能怎麼做 ? – 2012-01-30 06:18:24

+0

在'.cpp'文件中,你可以包含兩個頭文件並訪問這兩個類的成員,而在頭文件中你通常不應該訪問它們。 – vines 2012-01-30 06:32:44

+0

如果我必須這樣做,我可以使B類作爲A類中的嵌套類嗎? ..我做它...但我做了一個項目:有一個mainWindow運算符和許多像這樣的成員對象,我將訪問mainWindow中的成員對象,並獲取成員對象中的mainWindow的指針和訪問mainWindow公共函數..我認爲這是非常繁瑣的...你有一種方法來做到這一點? – 2012-01-30 06:53:54