在做项目中头文件之间交叉使用,出现了error C2143: 语法错误: 缺少“;”(在“*”的前面)错误,经过查资料发现,是因为头文件之间出现了重复包含。
解决方案是:
在其中一个类中,使用类前置申明就可以解决。且必须定义该类对象的成员变量为指针,及class A *obj;
具体定义为指针的理论可参考:(1)https://www.cnblogs.com/King-Gentleman/p/5081159.html
demo如下:
//a.h头文件中
#ifndef _A_H_
#define _A_H_
#include "b.h"
class A{
public:
B *b; //添加
};
#endif
//a.cpp
{
A::A(){
b = new B(); //添加
}
}
//b.h头文件中
#ifndef _B_H_
#define _B_H_
class A; //编译时让类知道A是一个类就
class B{
public:
A *a;//添加
};
#endif
//b.cpp
#include "a.h" //使用时再包含头文件
{
B::B(){
a = new A(); //添加
}
}
关于防止头文件重复定义有两种方式
//a.h头文件中:
//方法1
#ifndef _A_H
#define _A_H
class A{
public:
int m_a;
private:
int m_b;
}
#endif
//方法2
#pragma once
class A{
public:
int m_a;
private:
int m_b;
}
注,此文获取不同类的对象的指针,也可参考该文:https://blog.youkuaiyun.com/hanxiaoyong_/article/details/112055372