错误C2248:无法访问私有成员(operator =)

时间:2015-06-02 09:48:56

标签: c++ compiler-errors ifstream

我编写了一个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;
}

0 个答案:

没有答案