我有几个导致编译错误的文件,可以执行以下操作吗?
那么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){};
的main.cpp
#include "header1.h"
#include "header2.h"
// functions
该错误表明header2.h不知道Class1是什么类型。如何在此头文件中声明类型为Class1的对象,而不使用include或不将两个类放在同一个文件中(它们是完全独立的,只应满足main中调用的内部函数)?
谢谢!
答案 0 :(得分:7)
您可以使用前向声明:
class Class1; //forward declare Class1
class Class2{
public:
void function2(Class2 &, Class1 &);
};
将类型的参数传递给函数不需要完全定义类型。
答案 1 :(得分:0)
让每个标题包含它需要信息的每个其他标题,但使用预处理定义以避免循环引用或重复声明。例如 header2应该是
#ifndef FUNCS_H
#define FUNCS_H
#include "header1.h"
class Class2{
public:
void function2(Class2 &, Class1 &);
};
#endif
这就是我在C ++中完成所有标题的方法