c++ 父类成员函数的参数中有子类类型的对象 (前置声明解决)

父类Matrix  子类Image ;显然在子类的头文件Image.h中要包含进父类的的头文件Matrix.h,但在 父类成员函数的参数中有子类类型的对象 时,参数中的Image类型对象提示为未知的类型,但如果将Image.h 包含进Matrix.h中会提示:“Matrix”: 未定义基类  这种相互包含的错误

//Matrix.h
#ifndef Matrix_H
#define Matrix_H
//#include"Image.h"  会出现互相包含的错误!</span></span>
class Image;//前置引用
class Matrix
{
public:
	Matrix();
	Matrix(int h,int w);
	Matrix(int h, int w, double val);
	Matrix(const Matrix &m);
	~Matrix();

	
	Matrix operator*(const Image &img);  //两幅尺寸相同的图像,对应像素点的数值相乘;
	Matrix operator/(const Image &img);  //两幅尺寸相同的图像,对应像素点的数值相除;</span>
	
protected:
	int height;
	int width;
	double **data;
};
#endif
 
//Image.h
#ifndef Image_H
#define Image_H

#include "Matrix.h"

class Image : public Matrix
{
public:
	Image(); //构造函数,创建行列都为零的Image对象
	Image(int h, int w); //构造函数重载,创建h行,w列的Image对象
	
};
#endif
//Matrix.cpp
#include"Matrix.h"
#include"Image.h"</span>
Matrix::Matrix()//无参的构造函数
{
	height=0;
	width=0;
	data=NULL;
}
Matrix::Matrix(int h,int w)//两个参数的构造函数
{
	height=h;
	width=w;
	data=new double *[height];
	for(int i=0;i<height;i++)
	{
		data[i]=new double [width];
	}
}


 
 

解决方法:使用前置引用(声明)。即在父类的头文件Matrix.h中进行下子类的声明(class Image;)并且在父类的实现文件Matrix.cpp中包含进子类的头文件Image.h.


最后,贴上一片关于前置声明的很好的一片博文:http://blog.csdn.net/yunyun1886358/article/details/5672574


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值