我正在尝试从 Scores.txt 读取到我的Player
向量中。使用以下代码。
std::ifstream fin;
std::string alo;
int al;
Player* p = new Player;
std::vector<Player*> mPlayer;
fin.open("Scores.txt");
while (fin.good()) {
fin >> alo >> al;
p->setName(alo);
p->setScore(al);
mPlayer.push_back(p);
}
我的文本文件如下:
Ali 25
Reza 101
Igor 18
Katie 20
Jacky 18
macky 20
但是,在输出myPlayer
向量之后,我得到以下结果:
macky 20
macky 20
macky 20
macky 20
macky 20
macky 20
答案 0 :(得分:2)
您一直在设置相同的Player
实例。您需要每次创建新的Player
并设置其资源。可以这样做:
while (fin.good()) {
Player* p = new Player; // -------> here
fin >> alo >> al;
p->setName(alo);
p->setScore(al);
mPlayer.push_back(p);
}
但是,您最好只使用std::vector<Player> mPlayer
,因为它也会在堆中创建
或
如果您确实需要指针,可以使用std::vector<std::unique_ptr<Player>> mPlayer
而不是原始指针(read about smart pointers here)。
答案 1 :(得分:1)
我刚刚为您的问题写了一个工作版本。最重要的区别是循环内分配了多个Player。 这是您的代码的有效版本:
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <vector>
class Player
{
private:
std::string name;
unsigned int score;
public:
void setName(std::string tosetName)
{
name = tosetName;
}
void setScore(unsigned int tosetScore)
{
score = tosetScore;
}
};
int main()
{
std::ifstream fin;
std::string alo;
int al;
std::vector<Player*> mPlayer;
fin.open("Scores.txt");
while (fin.good())
{
Player* p = new Player;
fin >> alo >> al;
p->setName(alo);
p->setScore(al);
mPlayer.push_back(p);
}
return 0;
}