问题描述
- 帮助下c++对象定义的问题
-
各位大神,我一直很纳闷,我在定义对象的时候一直用的是CSerial *m_serial;
这种格式,今天看到CSerial m_serial;这种格式也能用,但是我一用就会报错,是需要定义什么东西吗?谢谢…………
解决方案
不探究原理的话,你可以找到CSerial 类的头文件,在你定义CSerial m_serial的CPP文件中include。
探究原理的话,楼上说的已经很清楚了,补充一下,你之所以之前使用CSerial *m_serial能够不报错,是因为此时你声明的是一个指针而不是对象(代码前面应该有class CSerial的前置声明),此时编译器不需要知道CSerial类的大小,只需要分配一个指针大小的空间即可,在链接的时候才会去找相关的方法和属性。如果你用CSerial m_serial形式声明,此时声明的是一个对象,由于你没有include这个类的头文件,所以编译器不知道要分配多少空间给这个对象,所以就报错喽。
解决方案二:
带* 的是定义指针,不带是类实例
他们用法会有差异,你要根据情况写你的代码,而不是仅仅去掉*号,否则你原来按照指着访问或者分配空间的地方都会报错
解决方案三:
具体报什么错误呢?
一般情况下,应该是CSerial类包含有参构造函数,需要传入参数;
定义为指针,还未开始调用构造函数,所以不会报错,当你new一个对象的时候就需要传入了。
解决方案四:
具体报什么错误呢?
一般情况下,应该是CSerial类包含有参构造函数,需要传入参数;
定义为指针,还未开始调用构造函数,所以不会报错,当你new一个对象的时候就需要传入了。
具体要看是报什么错误了
解决方案五:
带星号的不是对象,是这个类型的指针,需要通过new来创建对象,不带星号的才是定义了一个对象,由程序自动管理内存。
解决方案六:
CSerial *m_serial; 定义这个,只需要对CSerial 进行类型申明,告诉编译器CSerial 这个是一个类型名就行了,此时并不创建CSerial 类型的对象。
CSerial m_serial; 这个是定义实际的对象,创建对象是需要进行内存空间分配的,要创建CSerial 类型的对象,编译器必须知道CSerial 长什么样,才
知道CSerial 对象占用多大的空间,也才知道自己要分配多少内存空间来容纳CSerial 对象。
解决方案七:
CSerial *m_serial是对象指针,需要初始化;
CSerial m_serial是对象实例,可直接构造。
希望能够帮到你。
解决方案八:
太感谢了,只能采纳一个,所以感谢各位了……这么多热心人,谢谢
解决方案九:
一个是对象指针,一个是对象实例
带指针的需要初始化,对象实例,直接构造