#pragma pack() 引发的问题

来源:互联网 发布:java培训工资 编辑:程序博客网 时间:2024/06/02 04:17

记录下最近遇到的问题,写了一个类,声明如下:

class DeletedFile{public:virtual size_t Read(char *pBuf, size_t nBufSize) = 0;virtual INT32 Seek(INT32 nOffLow, INT32 *nOffHigh, UINT32 nMoveMethod); //参考了SetFileFilter的定义DeletedFile(const char *pFileName,  UINT64 nInFileIndex,  UINT64 nInFileSize);UINT64 GetFileSize();protected:UINT64 nFileIndex; //删除文件的簇号UINT64 nFileSize; //删除文件的大小UINT64 nCurPosition; //当前读取到的位置(在文件中)};

奇葩的问题来了,后面在构造函数中对成员赋值一直出错,如下:


最终才发现是另一个头文件中的#pragma pack()未关闭引发的问题,stackflow上也有关于这种问题的解释:

http://stackoverflow.com/questions/21474802/c-wrong-values-with-pragma-pack

引用其中的话

Without this, having the packing done via a separate header will lead to confusions, when it's added in one TU while not in another TU.

0 0
原创粉丝点击