2010-09-01 6 views
1
#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(); 
} 

Ceci est mon code, je reçois une erreur. erreur: ostream: symbole ambigu.Opérateur << surcharge en C++

tout le monde peut m'aider.

Répondre

2

Vous n'avez pas utilisé l'espace de noms std (utiliser l'espace de noms std est une habitude), donc le compilateur ne sait pas ce qu'est un ostream. En plus, vous n'avez pas défini l'opérateur < <, seulement déclaré elle, même si elle le reconnaît, elle ne saura pas quoi faire puisque vous ne l'avez pas dit.

+0

Mais pourquoi le symbole 'ambigu'? – Chubsdad

0

ofstream est dans l'espace de noms std, vous devez déclarer fout comme ceci:

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

Je suppose que vous simplement omis la définition de votre opérateur < fonction < pour la simplicité. Évidemment, vous devrez écrire le corps de cette fonction pour que votre prochaine ligne compile.

3

Vous devez spécifier l'espace de noms. Prefix ostream avec std - à savoir std::ostream

En outre, vous devez passer le type de obj par référence const à l'opérateur:

friend ostream& operator<<(ostream& stream, const obj& o); 
0

ostream est membre du std :: espace de noms, donc soit mettre un using namespace std; avant votre déclaration de classe ou vous y référer explicitement avec std::ostream.

+0

'utiliser std :: ostream;' est une autre possibilité. –

1

Comme je vois que vous devez

  • Ajouter

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

  • Ajouter un ; après la déclaration de classe
  • povide une mise en œuvre pour l'opérateur < <.

En fin de compte, vous devriez finir avec quelque chose comme:

#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

passer votre objet Tenir compte en tant que référence sinon un nouvel objet obj sera créé à chaque fois par le constructeur de copie.

friend ostream& operator<<(ostream& stream, obj& o);