Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运算符< C++中的超载_C++_Overloading_Operator Keyword - Fatal编程技术网

运算符< C++中的超载

运算符< C++中的超载,c++,overloading,operator-keyword,C++,Overloading,Operator Keyword,这是我的代码,我得到错误。 错误:ostream:不明确的符号 任何人都可以帮助我。你没有使用名称空间std使用名称空间std是一种习惯,所以编译器不知道ostream到底是什么。除此之外,您没有实际定义运算符您没有使用名称空间std使用名称空间std是一种习惯,因此编译器不知道ostream到底是什么。此外,您没有实际定义流的运算符在名称空间std中,因此您需要声明如下: #include <iostream> #include <fstream> class obj

这是我的代码,我得到错误。 错误:ostream:不明确的符号


任何人都可以帮助我。

你没有使用名称空间std使用名称空间std是一种习惯,所以编译器不知道ostream到底是什么。除此之外,您没有实际定义运算符您没有使用名称空间std使用名称空间std是一种习惯,因此编译器不知道ostream到底是什么。此外,您没有实际定义流的运算符在名称空间std中,因此您需要声明如下:

#include <iostream>
#include <fstream>

class obj
{
public:
 int i;
 friend ostream& operator<<(ostream& stream, obj o);
}

void main()
{
 obj o;
 ofstream fout("data.txt");
 fout<<o;
 fout.close();
}
我假设您只是省略了流的操作符的定义,它位于名称空间std中,所以您需要像这样声明fout:

#include <iostream>
#include <fstream>

class obj
{
public:
 int i;
 friend ostream& operator<<(ostream& stream, obj o);
}

void main()
{
 obj o;
 ofstream fout("data.txt");
 fout<<o;
 fout.close();
}

我假设您只是省略了运算符的定义您需要指定名称空间。将std作为ostream的前缀-即std::ostream

此外,还应将obj type by const引用传递给操作员:

std::ofstream fout("data.txt");

您需要指定名称空间。将std作为ostream的前缀-即std::ostream

此外,还应将obj type by const引用传递给操作员:

std::ofstream fout("data.txt");

ostream是std::namespace的成员,所以要么使用std放置一个名称空间;或者使用std::ostream显式引用它。

ostream是std::namespace的成员,因此,要么使用std放置一个using namespace;在您的类声明之前,或者使用std::ostream显式引用它。

正如我所见,您需要

使用std::ostream; 使用std::of流

增加一个;在类声明之后
我认为您需要为提供一个实现

使用std::ostream; 使用std::of流

增加一个;在类声明之后
为提供一个实现,考虑将对象作为引用传入,否则每次都会通过复制构造函数创建一个新的obj对象

#include <iostream>
#include <fstream>

using std::ostream;
using std::ofstream;

class obj
{
public:
 int i;
 friend ostream& operator<<(ostream& stream, const obj& o);
};

ostream& operator<<(ostream& stream, const obj& o)
{
  std::cout << o.i;
  return stream;
}

int main()
{
  obj o;
  ofstream fout("data.txt");
  fout << o;
  fout.close();
}

考虑将对象作为引用传入,否则每次都会通过复制构造函数创建一个新的obj对象

#include <iostream>
#include <fstream>

using std::ostream;
using std::ofstream;

class obj
{
public:
 int i;
 friend ostream& operator<<(ostream& stream, const obj& o);
};

ostream& operator<<(ostream& stream, const obj& o)
{
  std::cout << o.i;
  return stream;
}

int main()
{
  obj o;
  ofstream fout("data.txt");
  fout << o;
  fout.close();
}
使用std::ostream;是另一种可能性。使用std::ostream;这是另一种可能性。