All I need to do is to read the spieler.txt below in my main.cpp so I can test out some of the functions I wrote.
I have a mini spieler.txt file like this:
Stephen Stoudemire Power_Forward 21 16.6662
Vince McHale Small_Forward 69 19.61
Jimmy Stockton Small_Forward 52 18.2193
Steve Quarterman Center 78 26.5106
Pau Fisher Point_Guard 20 17.2687
Jerry Aldridge Point_Guard 44 26.87
Pau Gilmore OrPoint_Guard 34 27.8967
Dennis O'Neal Shooting_Guard 41 16.3044
Paul Aldridge Shooting_Guard 70 17.158
Kobe Cheeks Shooting_Guard 20 13.5169
and in my main.cpp I have trying to read my spieler.txt
#include<iostream>
#include<unordered_map>
#include<fstream>
#include<stdexcept>
#include<algorithm>
#include<numeric>
#include<iterator>
#include<set>
#include"vector.h"
#include"spieler.h"
int main() {
vector<Spieler> v;
ifstream input{"spieler.txt"};
Spieler f;
while(f.read(input)) {
// cout<<f;
v.push_back(f);
}
return 0;
}
But it keeps throwing me the error like:
/tmp/ccnT7yxX.o: In function `main':
main.cpp:(.text+0x23c): undefined reference to `Spieler::Spieler(std::string, Positionen, int, double)'
main.cpp:(.text+0x273): undefined reference to `Spieler::read(std::istream&)'
main.cpp:(.text+0x2bb): undefined reference to `Spieler::~Spieler()'
main.cpp:(.text+0x3cc): undefined reference to `Spieler::~Spieler()'
/tmp/ccnT7yxX.o: In function `Spieler::Spieler(Spieler const&)':
main.cpp:(.text.ZN7SpielerC2ERKS[ZN7SpielerC5ERKS]+0x11): undefined reference to `vtable for Spieler'
collect2: error: ld returned 1 exit status
I wonder what the problem is?
If someone is interested in my spieler.h and spieler.cpp it looks like this:
spieler.h:
#ifndef SPIELER_H
#define SPIELER_H
#include<iostream>
#include<unordered_map>
#include<stdexcept>
#include<algorithm>
#include<numeric>
#include<iterator>
#include<set>
#include<vector>
#include"vector.h"
using namespace std;
enum class Positionen{Point_Guard, Shooting_Guard, Small_Forward, Power_Forward,Center};
const vector<string> pnamen{"PG", "SG", "SF", "PF", "C"};
class Spieler{
string name;
// string team;
Positionen position;
int groesse;
double faehigkeiten;
// vector<double> faehigkeiten;
public:
Spieler(string = "Blake Griffin", Positionen=Positionen::Power_Forward, int = 208, double = 19.8);
virtual ~Spieler();
string get_name() const;
// string get_team() const;
Positionen get_position() const;
int get_groesse() const;
const double get_faehigkeiten() const;
// const vector<double>& get_faehigkeiten() const;
friend ostream& operator<<(ostream& o, const Spieler& h);
// void str_toupper(string str);
// double summe_faehigkeiten() const;
void wachsen();
bool operator<(const Spieler& s) const;
bool operator>(const Spieler& s) const;
bool operator==(const Spieler& s) const;
ostream& write(ostream&) const;
istream& read(istream&);
};
#endif
and my spieler.cpp looks like this:
#include<iostream>
#include<unordered_map>
#include<stdexcept>
#include<algorithm>
#include<numeric>
#include<iterator>
#include<set>
#include<vector>
#include"spieler.h"
#include"vector.h"
using namespace std;
//Spieler::Spieler(string name, Positionen position, int groesse, vector<double> faehigkeiten):name{name}, position{position}, groesse{groesse}, faehigkeiten{faehigkeiten}{}
Spieler::Spieler(string name, Positionen position, int groesse, double faehigkeiten):name{name}, position{position}, groesse{groesse}, faehigkeiten{faehigkeiten}{}
Spieler::~Spieler(){}
string Spieler::get_name() const{return name;}
//string Spieler::get_team() const{return team;}
int Spieler::get_groesse() const{return groesse;}
const double Spieler::get_faehigkeiten() const{return faehigkeiten;}
//const vector<double>& Spieler::get_faehigkeiten() const{return faehigkeiten;}
Positionen Spieler:: get_position() const{return position;}
/*
double Spieler::summe_faehigkeiten() const{
return accumulate(faehigkeiten.begin(), faehigkeiten.end(), 0.0, [] (const double& sum, const double& x) {return sum+x;});
}
*/
ostream& operator<<(ostream& o, const Spieler& h) {
o<<"[" << h.name << ", " <<h.team << "," <<pnamen[static_cast<size_t> (h.position)] <<", " <<h.groesse <<", {";
bool first(true);
/*
for(const auto& x: h.faehigkeiten){
if(first)
first=false;
else
o<<", ";
o<<x;
}*/
return o<<"}]";
}
bool Spieler::operator<(const Spieler& s) const{
return name<s.name;
}
bool Spieler::operator> (const Spieler& s) const{
return name>s.name;
}
bool Spieler::operator==(const Spieler& s) const{
return name == s.name;
}
ostream& Spieler::write(ostream& o) const{
o<<name <<" "<<team <<" " <<static_cast<size_t> (position)<<" " <<groesse;
for(const auto& x:faehigkeiten)
o<< " " << x;
return o;
}
istream& Spieler::read(istream& i ){
string s;
if(!(i >>s))
return i;
string t;
i >> t;
name = s + " " + t;
i >> team;
int j;
i >> j;
position = static_cast<Positionen>(j);
i>>groesse;
faehigkeiten.clear();
double d;
i >> d;
faehigkeiten.push_back(d);
i >>d;
faehigkeiten.push_back(d);
i >> d;
faehigkeiten.push_back(d);
return i;
}
void Spieler::wachsen() {
groesse+= 10;
}
Aucun commentaire:
Enregistrer un commentaire