您的位置:首页 > 其它

#pragma pack() 引发的问题

2015-11-13 15:52 295 查看
记录下最近遇到的问题,写了一个类,声明如下:

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.”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: