Penso che l'errore dipenda dal fatto che hai definito l'operatore nel file header cosicchè viene di fatto definito più volte, tante volte qunte includi l'header. Quindi sposta la definizione nel file .cpp e nell'header metti anche le direttive
#ifned EXPRE_H
#define EXPRE_H
come ho fatto io:
file Expr.h:
codice:
#ifndef EXPR_H
#define EXPR_H
#include <ostream>
#include <iostream>
using namespace std;
class Expr
{
//...
public:
// Costruttore senza parametri
Expr();
//...
friend ostream &operator<<(ostream& stream, Expr expression);
};
#endif
file Expr.cpp
codice:
#include "Expr.h"
Expr::Expr(){
}
// Overloading dell'operatore <<
// Inseritore
ostream &operator<<(ostream &stream, Expr expression)
{
stream << "CIAOOO" << endl;
return stream;
}
File main.cpp
codice:
#include <iostream>
#include "Expr.h"
using namespace std;
int main()
{
cout << Expr();
return 0;
}
Il tutto funziona con MinGW, ma dovrebbe anche con VC,