c++ 父类成员函数的参数中有子类类型的对象 (前置声明解决)
来源:互联网 发布:杰里米·兰姆数据 编辑:程序博客网 时间:2024/05/06 04:21
父类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
1 0
- c++ 父类成员函数的参数中有子类类型的对象 (前置声明解决)
- 父类和子类的同名成员函数参数格式相同,返回值类型不同
- [C++] 关于子类声明与父类同名同类型的成员变量的问题
- C语言的不完整类型和前置声明
- C语言的不完整类型和前置声明
- C语言的不完整类型和前置声明
- C++子类对象隐藏了父类的同名成员函数(隐藏篇)
- C++子类对象隐藏了父类的同名成员函数(隐藏篇)
- C++子类对象隐藏了父类的同名成员函数(隐藏篇)
- 类的前置声明
- 类的前置声明
- C++中类的前置声明
- c++中类的前置声明
- const类型参数的对象引用和const成员函数
- 声明一个Circle类,有数据成员radius(半径),成员函数area(),计算圆的面积,构造一个Circle的对象进行测试
- C语言的不完整类型(incomplete type)和前置声明
- 父类子类有相同的变量声明
- 父类的成员对象、父类、子类的构造函数的执行顺序
- MongoDB分片集群与复制集
- Mysql备份恢复笔记
- HDU 1005 Number Sequence(找规律,思维)
- [HDU1276]-Cash Machine
- 线段树之扫描线 自我小总结
- c++ 父类成员函数的参数中有子类类型的对象 (前置声明解决)
- mysql driver的bug发现之旅
- MySQL数据库MyISAM存储引擎转为Innodb的方法
- iOS 常用方法
- 是时候了解React Native了
- 奋斗的小蜗牛 南阳理工ACM 题目599
- React入门指引与实战
- 天纵智能软件快速开发平台参数设置插件
- SpringBean生命周期详解