1

我有几个导致编译错误的文件,可以执行以下操作吗?

header1.h

class Class1{
public:
void function1(Class1 &);
};

header2.h

class Class2{
public:
void function2(Class2 &, Class1 &);
};

cpp2.cpp

#include "header2.h"
void Class2::function2(Class2 & my2Class, Class1 & my1Class){};

主文件

#include "header1.h"
#include "header2.h"

// functions

该错误表明 header2.h 对 Class1 作为一种类型一无所知。如何在此头文件中声明 Class1 类型的对象,而不使用包含或不将两个类放在同一个文件中(它们是完全独立的,应该只满足在 main 中调用的内部函数)?

谢谢!

4

2 回答 2

7

您可以使用前向声明:

class Class1; //forward declare Class1
class Class2{
public:
void function2(Class2 &, Class1 &);
};

将类型的参数传递给函数不需要完全定义类型。

于 2012-04-05T13:49:22.783 回答
0

让每个标头都包含需要相关信息的其他标头,但带有预处理定义以避免循环引用或重复声明。例如 header2 应该是

#ifndef FUNCS_H

#define FUNCS_H

#include "header1.h"

    class Class2{
    public:
    void function2(Class2 &, Class1 &);
    };
#endif

这就是我在 C++ 中做所有标题的方式

于 2012-04-05T13:56:54.557 回答