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;
}
OriginalL'auteur LTDAN626 | 2013-03-31
Vous devez vous connecter pour publier un commentaire.
Vous avez oublié d'inclure
<ostream>
et de l'espace de noms spécificateur destd::
dans votre argumentation, qui conduit à l'erreur.Lisez la suite si vous voulez entendre parler de votre erreur suivante:
Cela signifie que vous définissez à l'opérateur de travailler sur une instance en cours d'une
Course
que la gauche (*this
), puisqu'il est défini comme un membre. Cela conduirait à un opérateur qui a un côté gauche et deux à droite, ce qui n'est pas possible.Vous devez définir l'opérateur en tant que non-membre de la fonction, depuis le côté gauche doit être une
ostream&
et pasCourse&
.N'a pas d'importance.
structs
sontclasses
par défautpublic
en C++.Une struct est juste une classe dont les membres/les fonctions sont publiques par défaut, rien de spécial. Même les choses que vous pouvez faire avec une classe que vous pouvez faire avec une struct.
essayé de le déplacer encore et toujours la même erreur
Vous n'avez pas inclure
ostream
et j'ai oubliéstd::
dans votre argumentation.OriginalL'auteur Zeta
devrait être
Et
devrait être
Puisqu'il n'est pas un membre de
Course
.friend
n'est pas pertinent. Le vrai problème, c'est qu'il doit être un non-membre de la fonction, quifriend
implique.Même erreur reste. Je suis d'ailleurs à l'aide d'un struct pas une classe. Les membres sont publiques n'importe quoi.
J'ai édité? peut-être que c'est fixé maintenant.
tentez votre correction de reposter dans un moment
LOL j'ai fait ce changement et j'ai eu des tonnes d'erreurs. Voici un exemple: I:\CS250\Assignments\Operator Oveloading\surcharge\inscription.cpp||In function 'void generateReport(std::ostream&, int,*)':| I:\CS250\Assignments\Operator Oveloading\surcharge\inscription.rpc|67|error: no match for 'operator<<' dans 'reportFile << *(cours + ((sizetype)(((unsigned int)i) * 12u)))'| I:\CS250\Assignments\Operator Oveloading\surcharge\inscription.rpc|67|attention: les candidats sont:| c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|106|remarque: std::basic_ostream ....
OriginalL'auteur
std::ostream& operator << (ostream &out, const Course &c);
à l'intérieur de laCourse
déclaration, doivent être déclarés commefriend
, sinon il ne peut pas prendre deux paramètres.aussi, le premier paramètre doit être
std::ostream&
et pas seulementostream&
édité.
Il n'a pas à être un ami, comme il n'y a pas privé les membres de la struct.
Ne pas oublier que c'est un réponse à un question, où la fonction a été déclarée DANS la déclaration de classe de bloc. Il
has to
être ami d'y rester. OU peut être pas l'ami, mais doit rester seul (et le code doit être complètement restructuré). Je jutt essayé d'être conservateur à l'égard de ce que l'OP n'.OriginalL'auteur Emilio Garavaglia