#pragma once的迷惑,淡淡的忧伤.
#pragma once的疑惑,淡淡的忧伤...
我的WSockExpert2Dlg.h : 文件中有如下信息
#pragma once
#include "MyCatchPacket.h"
#include "MyListCtrl.h"
#include "MyStaButton.h"
class CWSockExpert2Dlg
{
};
//我的MyCatchPacket.h文件中有如下信息
#pragma once
#include "stdafx.h"
#include <pcap.h>
#include "MyListCtrl.h"
#include "WSockExpert2Dlg.h"
class CMyCatchPacket
{
public:
LRESULT OnGetPacket(WPARAM wParam, CWSockExpert2Dlg* miandlg);//接收待解析数据的包 //找不到第二个参数CWSockExpert2Dlg的定义......
};
问题1:报错说找不到CWSockExpert2Dlg的定义,为什么.........?????
我的想法是头文件包含有问题,但具体又说不上来...
问题2:比如我的MyCatchPacket.h中包含了WSockExpert2Dlg.h,而WSockExpert2Dlg.h又包含了MyCatchPacket.h,又由于#pragma once的作用,不会再包含MyCatchPacket.h,对吗?但是后面的两个#include "MyListCtrl.h"
#include "MyStaButton.h"不会受影响吧???也就是还会被包含吧???
纠结很久的一个问题
解决方案是注释掉MyCatchPacket.h中的#include "WSockExpert2Dlg.h",在class CMyCatchPacket前生明class WSockExpert2Dlg;
不是很明白这个解决办法。。。
问题可能有点多,但可能原因就那么一个。。。。
各位见谅了。。。。
------解决方案--------------------
#pragma once就是编译器保证这个头文件,在一个编译单元中,只会include一次
你那个可能是循环引用吧
------解决方案--------------------
#pragma once的作用是只编译一次
循环include没有任何办法可以回避,是绝对的预编译错误,唯一的解决方法就是理清楚,谁该include谁
------解决方案--------------------
问题2就是循环引用的问题
我的WSockExpert2Dlg.h : 文件中有如下信息
#pragma once
#include "MyCatchPacket.h"
#include "MyListCtrl.h"
#include "MyStaButton.h"
class CWSockExpert2Dlg
{
};
//我的MyCatchPacket.h文件中有如下信息
#pragma once
#include "stdafx.h"
#include <pcap.h>
#include "MyListCtrl.h"
#include "WSockExpert2Dlg.h"
class CMyCatchPacket
{
public:
LRESULT OnGetPacket(WPARAM wParam, CWSockExpert2Dlg* miandlg);//接收待解析数据的包 //找不到第二个参数CWSockExpert2Dlg的定义......
};
问题1:报错说找不到CWSockExpert2Dlg的定义,为什么.........?????
我的想法是头文件包含有问题,但具体又说不上来...
问题2:比如我的MyCatchPacket.h中包含了WSockExpert2Dlg.h,而WSockExpert2Dlg.h又包含了MyCatchPacket.h,又由于#pragma once的作用,不会再包含MyCatchPacket.h,对吗?但是后面的两个#include "MyListCtrl.h"
#include "MyStaButton.h"不会受影响吧???也就是还会被包含吧???
纠结很久的一个问题
解决方案是注释掉MyCatchPacket.h中的#include "WSockExpert2Dlg.h",在class CMyCatchPacket前生明class WSockExpert2Dlg;
不是很明白这个解决办法。。。
问题可能有点多,但可能原因就那么一个。。。。
各位见谅了。。。。
------解决方案--------------------
#pragma once就是编译器保证这个头文件,在一个编译单元中,只会include一次
你那个可能是循环引用吧
------解决方案--------------------
#pragma once的作用是只编译一次
循环include没有任何办法可以回避,是绝对的预编译错误,唯一的解决方法就是理清楚,谁该include谁
------解决方案--------------------
问题2就是循环引用的问题