我编写了一个C ++类,其中包含一个ifstream作为成员。但是,在编译类时,会出现以下编译错误:
Error 1 error C2248: 'std::basic_ifstream<_Elem,_Traits>::operator =' : cannot access private member declared in class 'std::basic_ifstream<_Elem,_Traits>' c:\path\to\project\parser\bitstreamreader.h 55
该错误据说发生在终止类声明的最后一行。我知道流不能被复制,因此=运算符是不可访问的。但是,正如您从下面的代码中可以看到的,我在这里所做的就是声明ifstream的存在。为什么要触发这个错误?
class BitstreamReader {
public:
BitstreamReader(std::string file_name);
BitstreamReader();
~BitstreamReader();
UINT8 ReadBit();
UINT32 ReadBits(UINT32 bits);
INT32 ReadSignedBits(UINT32 bits);
UINT8 ReadByte();
UINT32 NextBits(UINT32 bits);
UINT32 ByteAlignedNextBits(UINT32 bits);
UINT32 GetPerByteBitOffset();
BOOL ByteAligned();
VOID AlignToByte();
BOOL EndOfBitstream();
VOID OpenFile(std::string file_name);
std::ifstream BitstreamFile;
private:
VOID FillBuffer();
UINT32 BitstreamPointer;
UINT32 BitBuffer;
UINT8 BitBufferPointer;
UINT8 BitBufferSize;
};
我首先将ifstream声明为此BistreamReader类的私有成员。但是,当发生错误时,我试图将其公开以查看它是否有任何区别。它没有。
这个错误真的很模糊。我不知道导致它的原因。我不是试图在任何方法实现中使用=运算符,而是......
以下是构造函数(在尝试了其他问题中的一些解决方案之后):
BitstreamReader::BitstreamReader() :
BitstreamFile("empty.dat", std::ios::in)
{
BitstreamPointer = 0;
FillBuffer();
BitBufferSize = sizeof(BitBuffer) * CHAR_BIT;
}
BitstreamReader::BitstreamReader(std::string file_name) :
BitstreamFile(file_name, std::ios::binary)
{
BitstreamPointer = 0;
FillBuffer();
BitBufferSize = sizeof(BitBuffer) * CHAR_BIT;
}