2012-05-25 65 views
1

說我有兩個類,如下所示。基本上我想將main()中定義的class1對象傳遞給第二個類中的方法。當我嘗試編譯這個時,它說class1沒有被聲明。任何人都可以解釋爲什麼這不起作用,我怎麼能解決它?函數參數中的C++類類型

//class1.h: 

class class1 
{ 
public: 
    class1(); 
    void method1(); 
private: 
    int myNumber; 
}; 

//class1.cpp has the implementation for method1(); 

//class2.h: 

class class2 
{ 
public: 
    class2(); 
    void method2(class1 myclass); 
}; 

//class2.cpp: 

#include "class1.h" 
#include "class2.h" 

int main(void) 
{ 
    class1 myclass; 
    class2 anotherClass; 

    anotherClass.method2(myclass); 

    return 0; 
} 

void class2::method2(class1 myclass) 
{ 
    return; 
} 

回答

6

您在類定義中缺少class關鍵字。

,而不是class1{...}你需要class class1{...}

+0

哎呦,輸入時錯過了這些。仍然與使用的類關鍵字相同的錯誤。 – Derek

+0

什麼是確切的錯誤信息? –

+0

確切的錯誤信息是:錯誤:'class1'尚未被聲明。它給出的行號是class2中的method2()原型。 – Derek

1

class2.h,編譯器不 「認識」 class1是如何定義的。有兩個可能的解決方案:

  • 添加#include "class1.h"class2.h
  • 通過簡單地在頭頂部聲明class class1;添加所謂的向前聲明中class2.hclass1。然後您需要將您的method2更改爲參考指針class1。如果您接着在class2.cpp中添加#include "class1.h",則一切都會生效。
1

唯一干淨的解決方案是在定義class class2之前包含定義class class1的標題。

需要注意的是一個向前聲明(人拉Gnosophilon的答案)將不會在這裏幫助,因爲它僅聲明類,但不定義它。這意味着你可以使用指針或引用類,但不能更多,特別是當你試圖做的時候,你不能通過值class1 myclass