This is a simple example.
EXAMPLE 1 If for example I declare this code (with class Complejo in same file):
#include <iostream>
#include <string>
using namespace std;
int main()
{
  Complejo com(1,1);
  cout << com << endl;
}
class Complejo
{
private:
  double real;
  double imaginario;
public:
  //Complejo();
  Complejo(double real, double imaginario)
  {
    real = 1;
    imaginario = 2;
  }
  double getReal() { return real; }
  double getImaginario() { return imaginario; }
};
ostream &operator<<(ostream &stream, Complejo& comp)
{
  stream << comp.getReal() << " + " << comp.getReal()<< endl;
  return stream;
}
My compiler says me:
sobrecarga_ostream.cpp:15:3: error: unknown type name 'Complejo'
EXAMPLE 2 But If I create sobrecarga_ostream.cpp:
#include <iostream>
#include <string>
#include "Complejo.h"
using namespace std;
int main()
{    
  Complejo com(1,1);
  cout << com << endl;
}
and Complejo.h:
#include <iostream>
using namespace std;
class Complejo
{
private:
  double real;
  double imaginario;
public:
  //Complejo();
  Complejo(double real, double imaginario)
  {
    real = 1;
    imaginario = 2;
  }
  double getReal() { return real; }
  double getImaginario() { return imaginario; }
};
ostream &operator<<(ostream &stream, Complejo& comp)
{
  stream << comp.getReal() << " + " << comp.getReal()<< endl;
  return stream;
}
Then, it works well.
Why does not "main + class" work in the same file and if I separate files then works?
Thanks!
 
     
    