<< 演算子をオーバーロードするのに本当に苦労しています。コードの特定の部分のみを変更できる宿題に取り組んでいます。あなたが尋ねる前に、私はクラスの代わりに構造体を使用して立ち往生しています。影響を受けるコードの一部は次のとおりです。
呼び出し関数は次のとおりです。
/*
* 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;
}
}
.h ファイルは次のとおりです。
#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
.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;
}
これが私が得続けるエラーメッセージです:
エラー: 'operator<<' を非関数として宣言 |
私は何時間もインターネットを検索してきましたが、この問題を解決するためにさまざまなアプローチを試みましたが、成功しませんでした. 助けてください!!
アドバイスに基づいてこれを修正するために、いくつかの異なる方法を試しました。私が試した 2 つの方法を次に示しますが、うまくいきませんでした: 方法 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
方法 2 (エラーの変更にも失敗しました):
#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;
}
再編集----------------------------------------------- --------- いくつかのコメントとヘルプの後、ここに私の現在のコードがあります:
.h ファイル内:
#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
.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;
}