C++ C++;流、函数声明和其他问题 Iobuffer.cpp

C++ C++;流、函数声明和其他问题 Iobuffer.cpp,c++,function,stream,C++,Function,Stream,返回声明说了一些非常奇怪的事情 no matching function for call to ‘IOBuffer::Write(std::basic_istream<char, std::char_traits<char> >&)’ 是的,这不是6个错误。标准库中的大多数名称都位于名称空间std中。因此,通常的做法是在使用它们时完全限定它们(std::ostream而不是ostream,等等) 一种不太推荐的方法是使用名称空间std声明,它将把整个s

返回声明说了一些非常奇怪的事情

no matching function for call to ‘IOBuffer::Write(std::basic_istream<char, std::char_traits<char> >&)’

是的,这不是6个错误。

标准库中的大多数名称都位于名称空间
std
中。因此,通常的做法是在使用它们时完全限定它们(
std::ostream
而不是
ostream
,等等)

一种不太推荐的方法是使用名称空间std声明
,它将把整个
std
命名空间拉入您当前所在的任何范围(以避免每次编写
std:
时的麻烦)。注意,在头文件中使用
名称空间…
声明被认为是非常糟糕的做法。这些文件应仅保留给源文件

更新


大多数新的错误消息是因为您混淆了
istream
ostream
<例如,code>istream有一个名为
seekg
的函数,而不是
seekp

最后两个错误是
const
问题

您得到的是倒数第二个错误,因为您正在从非常量函数
DRead
调用常量函数
Write
。您可能可以从
Write
的声明中删除
const
,但请确保在从它派生的所有类中也这样做

获取最后一个错误是因为
IOBuffer.cpp
使用常量定义-
int-IOBuffer::WriteHeader(ostream&stream)const
-但是
IOBuffer.h
使用非常量声明-
虚拟int-WriteHeader(ostream*)。您需要选择一个或另一个(即,它们要么在末尾都需要
const
,要么两者都不需要)

您是否对如何使用
const
感到困惑?有没有什么特别的原因使您将编写函数声明为
const
,将读取函数声明为non-
const
?通常情况下是相反的


有关更多信息,请查看,尤其是问题。

Oli,您可以更清楚地知道您的建议是使用
std::ostream
。通过先列出不推荐的替代方案,您会混淆问题。@Rob:的确如此。答案已重新安排@Malaken:查看我的更新答案,它解决了您的新错误消息。这可能有家庭作业标签…对不起,先生,我没有阅读整篇文章,错误是因为试图写入输入流。当我应该调用Read时,我就调用了写。@ Malaken没有问题,但是如果你要在C++中做大量的编程,请读一读。这将为您节省大量时间,否则您将花费大量时间试图找出代码无法编译的原因。:)
#include <cstring>
#include <iostream>
    class IOBuffer{
    public:
        IOBuffer (int maxBytes = 1000);
        IOBuffer & operator = (const IOBuffer &);
        virtual void Clear ();
        virtual int Pack (const void * field, int size = -1) = 0;
        virtual int Unpack (void * field, int maxbytes = -1) = 0;
        virtual void Print(ostream &) const;
        int Init (int maxBytes);
        virtual int Read (istream & x) = 0;
        virtual int Write (ostream & x) const = 0;
        virtual int DRead(istream &, int recref);
        virtual int DWrite(ostream &, int recref) const;
        virtual int ReadHeader (istream &);
        virtual int WriteHeader (ostream *);
    protected:
        int Initialized;
        char * Buffer;
        int BufferSize;
        int MaxBytes;
        int NextByte;
        int Packing;
    };
‘struct std::basic_istream<char, std::char_traits<char> >’ has no member named ‘seekp’
‘struct std::basic_istream<char, std::char_traits<char> >’ has no member named ‘tellp’
no matching function for call to ‘IOBuffer::Write(std::basic_istream<char, std::char_traits<char> >&)’
‘int IOBuffer::WriteHeader(std::ostream&) const’ does not match any in class ‘IOBuffer’