我为这个问题读了类似的问题但是有模板。
我没有模板,但我有同样的错误。这是我第一次重载<<
运算符。
我有三个档案。主文件,.h文件和.cpp文件。类Team使用我实现的另一个类,但我不认为该错误是由此类引起的。我认为我错了重载&lt;&lt;操作
这是我的.h文件:
#include "Calciatore.h"
#include <list>
class Team{
list<Calciatore*> calciatori;
string nome;
int punti;
public:
Team();
Team(string, int);
Team(list<Calciatore*>, string, int);
void set_calciatori(list<Calciatore*>);
list<Calciatore*> get_calciatori();
void set_calciatore(Calciatore*, int);
Calciatore* get_calciatore(int);
void set_nome(string);
string get_nome() const;
void set_punti(int);
int get_punti() const;
void add_calciatore(Calciatore*);
bool operator<(Team const&); //Overload operatore < e passaggio per riferimento(riduco utilizzo memoria)
bool operator>(Team const&);
std::ostream& operator<<(std::ostream&);
private:
void set_calciatori();
};
这是我的.cpp文件:
#include "Team.h"
#include <stdexcept>
#include <iostream>
Team::Team(){
set_calciatori();
set_nome("");
set_punti(0);
}
Team::Team(string nome, int punti){
set_calciatori();
set_nome(nome);
set_punti(punti);
}
Team::Team(list<Calciatore*> calciatori, string nome, int punti){
set_calciatori(calciatori);
set_nome(nome);
set_punti(punti);
}
void Team::set_calciatori(list<Calciatore*> calciatori){
if(calciatori.size() < 11 || calciatori.size() > 25){
cout << "\nLa lista deve contenere un numero di calciatori compreso tra 11 e 25";
return;
}
this->calciatori = calciatori;
}
void Team::set_calciatori(){
for(int i = 0; i < 11; i++){
this->calciatori.push_back(new Calciatore());
}
}
list<Calciatore*> Team::get_calciatori(){
return this->calciatori;
}
void Team::set_calciatore(Calciatore* calciatore, int pos){
if(pos < 0 || pos > this->calciatori.size()){
cout << "\nImpossibile inserire l'oggetto nella posizione inserita";
return;
}
list<Calciatore*>::iterator it = calciatori.begin();
advance(it, pos); //Avanzo l'iteratore fino alla posizione pos
this->calciatori.insert(it, calciatore);
}
Calciatore* Team::get_calciatore(int pos){
if(pos < 0 || pos > this->calciatori.size()){
cout << "\nImpossibile restituire l'oggetto alla posizione inserita";
return NULL;
}
list<Calciatore*>::iterator it = calciatori.begin();
advance(it, pos);
return *it;
}
void Team::set_nome(string nome){
this->nome = nome;
}
string Team::get_nome() const{
return this->nome;
}
void Team::set_punti(int punti){
this->punti = punti;
}
int Team::get_punti() const{
return this->punti;
}
void Team::add_calciatore(Calciatore* calciatore){
if(calciatori.size() >= 25){
cout << "\nLa squadra è già al completo";
return;
}
calciatori.push_back(calciatore);
}
bool Team::operator <(Team const &t){ //Ordino per punti. Se uguali guardo il nome
if( get_punti() == t.get_punti()){
return get_nome() < t.get_nome();
}
return get_punti() < t.get_punti();
}
bool Team::operator >(Team const &t){
if( get_punti() == t.get_punti()){
return get_nome() > t.get_nome();
}
return get_punti() > t.get_punti();
}
std::ostream& Team::operator<<(std::ostream& out){
out << "\nNome : \t" << get_nome() << " \tPunti : \t" << get_punti();
return out;
}
这是主要的:
void set_Campionato(Team*[]);
void print_Campionato(Team*[]);
int main() {
Team* serieA[20];
set_Campionato(serieA);
sort(serieA, serieA+20);
print_Campionato(serieA);
return 0;
}
void set_Campionato(Team* serieA[]){
...
}
void print_Campionato(Team* serieA[]){
for(int i = 0; i < 20; i++){
cout << *serieA[i] << "\n"; //This is line wher appears errore
}
}
我使用gcc 6.3.0。 对不起我的英文,谢谢你的回答。