1

我不确定为什么我在使用 ostream 时遇到问题。如果我使用 using namespace std; 它会引发更多错误,例如链接器错误。

这是我遇到问题和错误的代码。

virtual void Put (ostream&) const;

error C2061: syntax error : identifier 'ostream'
error C2065: 'ostream' : undeclared identifier
error C2059: syntax error : ')'
error C2143: syntax error : missing ';' before '{'
error C2447: '{' : missing function header (old-style formal list?)
error C2061: syntax error : identifier 'ostream'
error C2061: syntax error : identifier 'ostream'

这是我遇到问题的容器 .h 头文件

#ifndef CONTAINER_H
#define CONTAINER_H
#include <ostream>
#include <iostream>
#include "Object.h"
#include "NullObject.h"
#include "Ownership.h"
#include "Iterator.h"
#include "Visitor.h"


class Container : public virtual Object,  public virtual Ownership
{
protected:
unsigned int count;

Container ();
public:
virtual unsigned int Count () const;
virtual bool IsEmpty () const;
virtual bool IsFull () const;
//  virtual HashValue Hash () const;
virtual void Put (ostream&) const;
virtual Iterator& NewIterator () const;

virtual void Purge () = 0;
virtual void Accept (Visitor&) const = 0;
};

#endif

如果我使用

virtual void Put (std::ostream&) const;

它修复了错误,但是,在接下来的 .cpp 文件中,我在 put 函数中得到了与上面相同的错误。我确实在 put 函数中尝试了 std:: ,但它引发了大量的链接器错误。我试图使用命名空间标准;但这也会引发大量链接器错误。

#include "Container.h"
#include "NullIterator.h"
#include <ostream>
#include <iostream>


Container::Container () :
count (0)
{}

unsigned int Container::Count () const
{ return count; }

bool Container::IsEmpty () const
{ return Count () == 0; }

bool Container::IsFull () const
{ return false; }

Iterator& Container::NewIterator () const
{ return *new NullIterator (); }

void Container::Put(ostream&)const

{ 
    return;

}

这是我现在在该 container.cpp 文件中遇到的错误

error C2065: 'ostream' : undeclared identifier
error C2059: syntax error : ')'
error C2143: syntax error : missing ';' before '{'
error C2447: '{' : missing function header (old-style formal list?)

我试图#include fstream

我会很感激这里的任何帮助。还有大量代码,但我认为您不需要查看其他文件。

4

2 回答 2

1

也许你忘记了 std 命名空间。ostream是在std命名空间中声明的,所以需要在Container的声明前加上“using namepsace std”或者使用范围解析(std::ostream)。

于 2010-11-01T02:13:56.060 回答
0
void Container::Put(ostream&)const

{ 
    return;

}

我对此还有些陌生,但是您在这里不需要变量名吗?

于 2012-06-14T09:22:38.857 回答