Оператор << перегрузка в с ++ - PullRequest
1 голос
/ 01 сентября 2010
#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();
}

Это мой код, я получаю сообщение об ошибке. ошибка: ostream: неоднозначный символ.

любой может мне помочь.

Ответы [ 6 ]

3 голосов
/ 01 сентября 2010

Вам необходимо указать пространство имен.Префикс ostream с std - то есть std::ostream

Кроме того, вы должны передать тип obj с помощью константной ссылки на оператор:

friend ostream& operator<<(ostream& stream, const obj& o);
2 голосов
/ 01 сентября 2010

Вы не использовали пространство имен std (в любом случае использование пространства имен std является привычкой), поэтому компилятор не знает, что такое ostream. Кроме того, вы фактически не определили оператор <<, только объявили его поэтому даже если он это распознает, он не будет знать, что делать, поскольку вы не сказали этого. </p>

1 голос
/ 01 сентября 2010

Насколько я понимаю, вам нужно

  • Добавить

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

  • Добавьте ; после объявления класса
  • Обеспечить реализацию для оператора <<. </li>

В конце вы должныв конечном итоге что-то вроде:

#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();
}
0 голосов
/ 01 сентября 2010

Рассмотрите возможность передачи вашего объекта в качестве ссылки, в противном случае каждый раз при помощи конструктора копирования будет создаваться новый объект obj.

friend ostream& operator<<(ostream& stream, obj& o);  
0 голосов
/ 01 сентября 2010

ostream является членом пространства имен std :: name, поэтому либо поместите using namespace std; перед объявлением класса, либо явно обратитесь к нему с помощью std::ostream.

0 голосов
/ 01 сентября 2010

ofstream находится в пространстве имен std, поэтому вам нужно объявить fout следующим образом:

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

Я предполагаю, что вы просто опустили определение вашей функции оператора << для простоты,Очевидно, вам нужно написать тело этой функции для следующей строки для компиляции. </p>

...