erreur: la déclaration de "l'opérateur<<" non-fonction|

J'ai vraiment du mal avec la surcharge de la << opérateur. Je suis en train de travailler sur un devoir à la maison où je peux seulement modifier certaines parties du code. Avant de vous demander, je SUIS bloqué à l'aide d'une structure au lieu d'une classe. Voici les parties affectées du code:

La fonction d'appel est:

/*
 * Write a CSV report listing each course and its enrollment.
 */
void generateReport (ostream& reportFile,
             int numCourses,
             Course* courses)
{
  for (int i = 0; i < numCourses; ++i)
    {
        //courses is an array of "Course" structs
        reportFile << courses[i] << endl;
    }
}

Ici est la .h fichier:

#ifndef COURSE_H
#define COURSE_H

#include <iostream>
#include <string>


struct Course {
    std::string name;
    int maxEnrollment;
    int enrollment;

    Course();
    Course(std::string cName);

    std::ostream& operator << (ostream &out, const Course &c);
};

#endif

Ici est la .fichier cpp:

#include "course.h"

using namespace std;


Course::Course()
{
    name = "";
    maxEnrollment = 0;
    enrollment = 0;
}

Course::Course(string cName)
{
    name = cName;
    maxEnrollment = 0;
    enrollment = 0;
}

//send course to file
ostream& Course::operator << (ostream &out, const Course &c)
{
    out << c.name << "," << c.enrollment << endl;
    return out;
}

Voici le message d'erreur que je reçois:

erreur: déclaration de l'opérateur<< " non-fonction|

J'ai été chercher sur internet pendant des heures et essayé beaucoup de différentes approches pour résoudre ce problème, sans succès.
S'il vous plaît aider!!

J'ai essayé un couple de différentes méthodes pour résoudre ce sur la base des avis. Voici deux méthodes que j'ai essayé qui ne fonctionne pas:
Méthode 1:

#ifndef COURSE_H
#define COURSE_H

#include <iostream>
#include <string>


struct Course {
    std::string name;
    int maxEnrollment;
    int enrollment;

    Course();
    Course(std::string cName);

};

//Moved this outside the struct
std::ostream& operator << (ostream &out, const Course &c);

#endif

Méthode 2 (également échoué à changer erreur):

#include "course.h"

using namespace std;


Course::Course()
{
    name = "";
    maxEnrollment = 0;
    enrollment = 0;
}

Course::Course(string cName)
{
    name = cName;
    maxEnrollment = 0;
    enrollment = 0;
}

std::ostream& operator << (ostream &out, const Course &c);


//send course to file
ostream& Course::operator << (ostream &out, const Course &c)
{
    out << c.name << "," << c.enrollment << endl;
    return out;
}

RÉ-ÉDITER--------------------------------------------------------
Après quelques-uns des commentaires et de l'aide, voici mon code actuel:

Dans le .h fichier:

#ifndef COURSE_H
#define COURSE_H

#include <iostream>
#include <string>


struct Course {
    std::string name;
    int maxEnrollment;
    int enrollment;

    Course();
    Course(std::string cName);

    std::ostream& operator << (std::ostream &out, const Course &c);
};

#endif

Dans le .fichier cpp:

#include "course.h"

using namespace std;

Course::Course()
{
    name = "";
    maxEnrollment = 0;
    enrollment = 0;
}

Course::Course(string cName)
{
    name = cName;
    maxEnrollment = 0;
    enrollment = 0;
}


//send course to file
ostream& operator << (ostream &out, const Course &c)
{
    out << c.name << "," << c.enrollment << endl;
    return out;
}
ami. dans la struct

OriginalL'auteur LTDAN626 | 2013-03-31