一、error C2061: 语法错误: 标识符“Car”

问题截图:
Parking.h文件:
clipboard.png
Car.h文件:
clipboard.png

明明我include了Car.h文件,可编译器却找不到,那可能是我Car.h文件出现了问题,谷歌之后才知道,这是由于循环引用造成的。

clipboard.png
解决方法:
在Parking.h中用类的前项声明:class Car;

clipboard.png

补充:
为了保证编译安全,在.h文件头部添加一些预处理,如果不加,则在文件多次引用时报错:
"error C2011 ‘class’类型重定义"

  1. #pragma once

保证文件只被编译一次

  1. #ifdef,#define,#endif

不仅可以保证同一个文件不会被编译多次,也能保证内容完全相同的两个文件不会被不小心同时编译,但依赖于宏名字不能冲突
示例:

#pragma once

... ... // 一些声明语句

或者

#ifndef   _SOMEFILE_H_

#define  _SOMEFILE_H_

.......... // 一些声明语句

#endif

二、链表pop()方法

clipboard.png
这段程序有两处问题:

  1. 形参Car newData是值传递,相当于复制一个与实参一样对象传给了函数,那么在函数里不管怎么对newData进行操作,都不会对外面的实参造成任何影响。

clipboard.png
调用pop方法:

clipboard.png

2.newData与*temp->data都是对象,不能用"="赋值,需要使用重载函数重载"=":

clipboard.png

三、this 是 0xCDCDCDCD

查了一下,出现0xCDCDCDCD一般是由于指针没有初始化。
clipboard.png
于是打断点debug,一步一步调试,终于发现,原来是我没有对data初始化

clipboard.png

添加初始化后再调试,data就有值了

clipboard.png

四、 cout不明确

这个错是非常诡异,目前我只遇到过两次,一次是写程序时莫名其妙就出现了,还有一次是在帮董浩天调试程序时突然就出现了。触发条件尚不清楚。
解决方法:将"using namespace std;"给注释掉,等待它所有的cin,cout都出错,再将注释去掉,问题就解决了
原文地址:"error: cout 不明确的符号"

五、 将对象数组作为类的成员

一开始的时候,我是这么写的:

clipboard.png

然后它报错,我想了想,哦,类在声明时是不给分配内存空间的,所以Car data[MaxSize]这种写法是不对的
得先给它一个指针指向数组名,然后在构造函数里去创建这个类的成员Car data[MaxSize],如下:

类的声明
clipboard.png
构造函数:

clipboard.png


陈杰
167 声望332 粉丝

为API生,为框架死;