假设我有两个类设置,如下所示。基本上我想将main()中定义的class1对象传递给第二个类中的方法。当我尝试编译它时,它表示class1尚未声明。任何人都可以解释为什么这不起作用以及如何解决它?
//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;
}
答案 0 :(得分:6)
您在课程定义中缺少class
关键字。
而不是class1{...}
您需要class class1{...}
等等。
答案 1 :(得分:1)
在class2.h
中,编译器不“知道”class1
的定义方式。有两种可能的解决方案:
#include "class1.h"
class2.h
class1
中添加class2.h
的所谓转发声明,只需在标题顶部声明class class1;
即可。然后,您需要将method2
更改为期望引用或指针到class1
。如果您在#include "class1.h"
中添加class2.cpp
,则一切正常。答案 2 :(得分:1)
唯一干净的解决方案是在class class1
的定义之前包含定义class class2
的标头。
请注意,前向声明(al la Gnosophilon的回答)在这里没有帮助,因为它只是声明类,但不定义它。这意味着您可以使用指针或类的引用,但不能更多,特别是当您尝试执行时,您无法按值传递class1 myclass
。