2012-05-25 135 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