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:
file Expr.cppcodice:#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 main.cppcodice:#include "Expr.h" Expr::Expr(){ } // Overloading dell'operatore << // Inseritore ostream &operator<<(ostream &stream, Expr expression) { stream << "CIAOOO" << endl; return stream; }
Il tutto funziona con MinGW, ma dovrebbe anche con VC,codice:#include <iostream> #include "Expr.h" using namespace std; int main() { cout << Expr(); return 0; }
![]()

Rispondi quotando