我在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)?这样,他们就不必相互依赖。

07-24 12:52