2010-10-26 93 views
-5

我已經包含適當C++類的實例化問題

頭文件, 部首加爾

,但我不能實例化特定類

得到錯誤

error C2065: 'ClassName' : undeclared identifier 



Sample Code 

Class A{ 

//instantiate class B 

} 


Class B { 


//need to instantiate Class A 

} 
+0

我可以實例化其他類 – Sudantha 2010-10-26 11:23:42

+0

你會粘貼任何代碼嗎?無法工作的最小完整示例 – 2010-10-26 11:25:00

+5

無代碼,無Cookie。 – sbi 2010-10-26 11:26:55

回答

1

因爲我們還沒有發佈對我們有什麼真正的代碼實際上使用的,我帶你去一個猜測,你的代碼實際上是這樣的:

啊:

#ifndef HEADER_A 
#define HEADER_A 

#include "B.h" 
class A { 
private: 
    B someMember; 
}; 

了Bh :

#ifndef HEADER_B 
#define HEADER_B 
#include "A.h" 

class B { 
public: 
    doSomething(A param); 
}; 

B.cpp:

#include "B.h" 
#include "A.h" 

void B::doSomething(A param) { } 

正如Flinsch所說,你需要有前向聲明來避免包含排序問題。最簡單的方法是在.h文件中刪除循環包含,並將正向聲明(class B;class A;併入A.h和B.h)。

1

順便說一句。在類定義結束時,您沒有;

+0

謝謝,但它完成:)它只是描述一個場景 – Sudantha 2010-10-26 11:34:28

+5

不,你描述沒有情況,因爲沒有真正的代碼,沒有實例寫入。你的問題對我們來說只是一個模糊的笑話。 – 2010-10-26 11:38:06

1

根據我的理解,類A和類B之間存在循環依賴關係。因此,您需要對這兩個類(或兩者)中的至少一個使用前向聲明。

+0

我的類在單獨的.cpp文件中有什麼想法? – Sudantha 2010-10-26 11:35:01

+0

是的,我已經完成了所有這些! – Sudantha 2010-10-26 11:39:53

+0

是的,這是每個類都有單獨的.cpp文件的標準過程。 *你做了什麼*「所有人」?你真的不想得到幫助,是嗎? – Flinsch 2010-10-26 11:48:11