记录下最近遇到的问题,写了一个类,声明如下:
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.”