函数参数中的C ++类类型

时间:2012-05-25 19:59:32

标签: c++

假设我有两个类设置,如下所示。基本上我想将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;
}

3 个答案:

答案 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