我在2个不同的文件中有2个类:
RegMatrix.h:
#ifndef _RM_H
#define _RM_H
#include "SparseMatrix.h"
...
class RegMatrix{
...
RegMatrix(const SparseMatrix &s){...} //ctor
...
};
#endif
SparseMatrix.h:
#ifndef _SM_H
#define _SM_H
#include "RegMatrix.h"
...
class SparseMatrix{
...
SparseMatrix(const RegMatrix &r){...} //ctor
...
};
#endif
在构造函数行中,出现错误:
错误C4430:缺少类型说明符-假定为int。
错误C2143:语法错误:在'&'之前缺少','
但是当我添加类声明时
class SparseMatrix;
在RegMatrix.h文件中,
class RegMatrix;
在SparseMatrix.h文件中,它可以正常工作。
我的问题是,如果我有包含内容,为什么需要它?
10倍
最佳答案
您不能有循环#includes(一个文件#includes另一个#includes第一个文件)。向前声明其中一个类而不是#include会破坏链条并使其工作。声明类名使您可以使用该名称,而不必了解类的内部位。
顺便说一句,对圆形#includes的渴望是一种设计气味。也许您可以创建两个类可以依赖的接口(interface)?这样,他们就不必相互依赖。