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任务。