class BufferFile{
public:
        BufferFile(IOBuffer &);
        int Open(char *);
        int Create(char *);
        int Close();
        int Rewind();
        int Read(int recaddr = -1);
        int Write(int recaddr = -1);
        int Append();
        IOBuffer & GetBuffer();
    protected:
        IOBuffer & Buffer;
        std::fstream File;
        int HeaderSize;
        int ReadHeader();
        int WriteHeader();
    };

    BufferFile::BufferFile(IOBuffer & from):Buffer(from){}

    int BufferFile::Read(int recaddr){
        if(recaddr==1) return Buffer.Write(File);
        else return Buffer.DWrite(File, recaddr);
    }

    int BufferFile::Append(){
        File.seekp(0,std::ios::end);
        return Buffer.Write(File);
    }

    IOBuffer & BufferFile::GetBuffer(){
        return Buffer;
    }

    int BufferFile::ReadHeader(){
        return Buffer.ReadHeader(File);
    }

    int BufferFile::WriteHeader(){
        return Buffer.WriteHeader(File);
    }


我从IOBuffer字段中收到一些错误,说它没有在函数作用域中声明,或者在构造函数上的“&”标记之前未“预期”)”声明,这是什么原因引起的?

这是此项目中涉及的所有文件:
Person.h!
Buffile.cpp
BuffFile.h
Delim.cpp
Delim.h
Fixfld.cpp
Fixfld.h
FixLen.cpp
FixLen.h
Iobuffer.cpp
Iobuffer.h
Length.cpp
Length.h
Varlen.cpp
Varlen.h

最佳答案

我认为您的问题是这样的(来自Buffile.h):

#ifndef IOBUFFER
#define IOBUFFER
#include "Iobuffer.h"
#endif


...该逻辑破坏了您在Iobuffer.h中的相似/冗余逻辑:

#ifndef IOBUFFER
#define IOBUFFER
class IOBuffer{
[...]
#endif


问题在于,永远不会解析Iobuffer.h中的“类IOBuffer”声明,因为在Buffile.h中已经定义了编译器值IOBUFFER,因此未激活Iobuffer.h顶部的#ifndef IOBUFFER。

正确的方法是将Buffile.h修改为仅包含#include“ Iobuffer.h”行,然后将其保留在Iobuffer.h的内容中,以执行#ifndef和#define任务。

10-07 20:01