error C2143: 语法错误 : 缺少“;”(在“*”的前面)

问题描述

error C2143: 语法错误 : 缺少“;”(在“*”的前面)_第1张图片
今天遇到一个bug,找了半天都没搞定,后来还是通过百度搜索到类似的帖子才解决的,其实很简单,只是以前没有见过罢了。

error C2143: 语法错误 : 缺少“;”(在“*”的前面)_第2张图片

ResultDialog*resultDialog; 附近,怎么都不可能出错,怎么会缺少“;”呢?

原因在于,在HeartRateDetect类的定义中添加了防止重复包含的宏定义

#ifndef _HeartRateDetect_H
#define _HeartRateDetect_H

但是在ResultDialog类中,包含了HeartRateDetect的定义,在HeartRateDetect类中又包含了ResultDialog类的定义,结果造成重复包含了。

解决方案

解决类的交叉引用的方案是使用类的前置声明+指针引用,指针引用作为类成员,会告诉编译器我这里指向了一个ResultDialog类的对象,而不必关注该类的大小,也不必开辟对应内存,因此只需要在HeartRateDetect类前面声明该类,告诉编译器这个类存在即可。

在HeartRateDetect.h 文件中,把#include"ResultDialog.h" 删掉,然后在class HeartRateDetect 前面加一行 class ResultDialog; 的前置声明即可

或者,更麻烦一点,这两个类既然产生了交叉引用,那么在设计上,是存在一个双向依赖的,A类中包含B类的对象,B类中包含A类的对象,那么使用#include引用很可能会造成循环包含,如果存在设计上的可能性,应该把A和B合并成一个类。

你可能感兴趣的:(C/C++,debug)