1

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

3 回答 3

6

您在类定义中缺少class关键字。

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

于 2012-05-25T20:02:41.000 回答
1

class2.h中,编译器不“知道”如何class1定义。有两种可能的解决方案:

  • 添加#include "class1.h"一个class2.h
  • 只需在标题顶部声明即可添加所谓的in前向声明。然后,您需要将您的更改为期望引用指向. 如果你然后添加,一切都会工作。class1class2.hclass class1;method2class1#include "class1.h"class2.cpp
于 2012-05-25T20:05:15.213 回答
1

唯一干净的解决方案是class class1class class2.

请注意,前向声明(al la Gnosophilon 的回答)在这里没有帮助,因为它只声明了类,但没有定义它。这意味着您可以使用指向该类的指针或引用,但不能使用更多,特别是您不能class1 myclass在尝试时按值传递。

于 2012-05-25T20:34:04.670 回答