错误位置的头文件声明导致添加类变量出错

问题描述:

添加一个继承自CAsyncSocket的类CClientSocket,然后添加相关头文件声明,再在CClientDlg类中定义

CClientSocket m_ClientSocket;

结果运行出错:

e:\2005\vc\client\clientdlg.h(48) : error C2146: 语法错误 : 缺少“;”(在标识符“m_clientSocket”的前面)

e:\2005\vc\client\clientdlg.h(48) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
e:\2005\vc\client\clientdlg.h(48) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

错误原因和解决方法:

原因为在ClientSocket.h中添加了相关头文件声明 #include"ClientDlg.h",去掉即可。

原因分析总结:

ClientDlg.cpp中声明了#include"ClientDlg.h",而 ClientDlg.h中又声明了#include"ClientDlg.h"形成了相互声明

遇到这种问题

首先,每个头文件中都应该使用
#ifndef xxx
#define xxx
 your declaration
#endif

即可避免重复声明问题

其次,当两个头文件互相引用的时候,在 .h文件中不要include对发, 而是使用声明,比如:
#ifndef _a_h
#define _a_h

class B;

class A
{
   B* pB;
};
#endif


#ifndef _b_h
#define _b_h


class A;

class B
{
   void func(A &);
};
#endif

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值