2011-12-08 108 views
2

我有一個C++的問題。C++中的正向聲明類

我要創建兩個類,A和B.

A類有一些方法採取一種觀點認爲是B類,但在BI類的實例也有一些方法,這需要一個說法,是A類的實例

我想最後轉發申報A類,然後定義B類中,我定義A級

一些代碼:

class A; 

class B 
{ 
    void Method1(A* instaceOfA) 
{ 
    instaceOfA->MethodX(); 
} 
    ....... 
}; 

class A 
{ 
    Method1(B* instaceOfB); 
    MethodX(); 
    ....... 
}; 

我在Visual Studio 2010中編寫代碼,它顯示一個錯誤,因爲我在類A中調用MethodX,但類A沒有完全定義。

我該如何解決這個問題?

+4

'我有C++的一個問題。'真是一個偉大的行開始與! – iammilind

+0

只爲你的edifocatipn,這個術語是「前向聲明」,而不是「預先定義」。 –

回答

0

以相反的方式定義和聲明類?

class B; 

class A 
{ 
    Method1(B* instaceOfB); 
    MethodX(); 
}; 

class B 
{ 
    void Method1(A* instaceOfA) 
    { 
     instaceOfA->MethodX(); 
    } 
}; 

當然,這並不工作,如果A::Method1功能也是內聯。

1

我建議移動的方法的實現類的聲明外,像這樣:

class A; 
class B { 
public: 
    void Method1(A* instanceOfA); 
    ... 
}; 

class A { 
public: 
    void Method1(B* instanceOfB); 
    void MethodX(); 
    ... 
}; 

void B::Method1(A* instanceOfA) { 
    ... 
} 
0

是在頭文件中的代碼實現了一套?如果是這樣,嘗試移動到CPP文件#包括A和B

4

B::Method1定義class A

//header file 
class A; 

class B 
{ 
    void Method1(A* instaceOfA); 
    ....... 
}; 

class A 
{ 
    Method1(B* instaceOfB); 
    MethodX(); 
    ....... 
}; 

// cpp file 
void B::Method1(A* instaceOfA); 
{ 
    instaceOfA->MethodX(); 
} 

聲明後,這是.cpp文件的目的。您可以在頭文件中聲明類和方法,然後將這些定義添加到.cpp文件中。

0

是否有理由需要實現B類內聯?如果從implentations(最好將它們放在h和.cpp文件)單獨的類定義,這個問題就會迎刃而解..

//blah.h 

class A; 

class B 
{ 
    void Method1(A* instaceOfA); 
    ....... 
}; 

class A 
{ 
    Method1(B* instaceOfB); 
    MethodX(); 
    ....... 
}l 


//blah.cpp 

#include "blah.h" 

class B 
{ 
    void Method1(A* instaceOfA) 
{ 
    instaceOfA->MethodX(); 
} 
    ....... 
}; 

class A 
{ 
    Method1(B* instaceOfB)# 
    { 
     instaceOfB->Method1(); 
    } 

    MethodX(); 
    ....... 
}