gpt4 book ai didi

c++ - 迁移 C++ 代码以使用标准 header 。现在得到 : reference to 'ostream' ambiguous

转载 作者:太空宇宙 更新时间:2023-11-04 15:52:43 25 4
gpt4 key购买 nike

我一直在迁移一些代码来更改 header 的声明,因为它们不包含在我的 Ubuntu 环境中。我终于更改了所有文件,但出现以下错误:

Item.h:33: error: reference to ‘ostream’ is ambiguous
Item.h:16: error: candidates are: struct ostream
/usr/include/c++/4.4/iosfwd:130: error: typedef struct
std::basic_ostream<char, std::char_traits<char> > std::ostream
Item.h:33: error: ISO C++ forbids declaration of ‘ostream’ with no type
Item.h:33: error: ‘ostream’ is neither function nor member function; cannot be declared friend

代码如下:

class Item
{
public:
Item( //const Wrd* hd,
const Term * _term, int _start, int _finish );
~Item();
int operator== (const Item& item) const;
friend ostream& operator<< ( ostream& os, const Item& item ); // <-- error

有人知道我将如何纠正这个问题吗?

最佳答案

看起来在 Item.h 中你有一行看起来像这样:

struct ostream;

您遇到的问题是 ostream不是 struct ;这是一个typedef对于 basic_ostream<char> ,因此您对 ostream 的自定义定义与 ostream 的标准定义冲突这是在 <iosfwd> 中预先声明的.因此,当你写

friend ostream& operator<< ( ostream& os, const Item& item );

编译器无法判断 ostream指的是你的 struct ostream或更复杂的 typedef由标准头文件导出。

要解决此问题,请找到您尝试转发声明 ostream 的位置并将其删除。相反,请考虑使用头文件 <iosfwd>导入对 ostream 的前向引用.

更一般地说,您不应该尝试在标准库中前向声明任何内容。就#include适当的 header 。

关于c++ - 迁移 C++ 代码以使用标准 header 。现在得到 : reference to 'ostream' ambiguous,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5370923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com