ifstream尝试引用已删除的函数

时间:2015-05-31 07:57:09

标签: c++ c++11 ifstream

我正在编写虚拟锦标赛的代码。问题是团队类有一个ifstream对象,我知道流对象没有复制构造函数,因此我将playing8从团队对象的向量转换为指向对象的指针,因此团队对象不会被复制。但是现在我得到了这个错误 错误16错误C2280:' std :: basic_ifstream> :: basic_ifstream(const std :: basic_ifstream>&)' :尝试引用已删除的函数c:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ xmemory0 592 1 Assignment3

如何在不从团队类中删除ifstream对象的情况下解决此问题? 参加tournament.h的继承人代码

#include "team.h"

class Tournament
{
std::ofstream out_file;
std::ifstream in_file;
std::vector<team> teams;
std::vector<team*> playing8;
public:
void schedule();
void schedule2();
void tfinal();
void selectPlaying8();
void rankTeams();
void match(int,int);
Tournament();
~Tournament();
};

锦标赛构造函数的代码

Tournament::Tournament()
{
srand(time(NULL));
in_file.open("team_list.txt");
string input;
int noteam=0;
while (getline(in_file, input)){
    noteam++;
}
in_file.close();
for (int i = 0; i < noteam;i++){
    string x=to_string(i)+".csv";
    team temp(x);
    temp.set_teamform((6 + rand() % 5) / 10.0);
    teams.push_back(temp);
}
}

选择播放的代码8;

void Tournament::selectPlaying8(){
for (int i = 0; i < 7; i++){
    playing8.push_back(&teams[i]);
    playing8[i]->set_playing();
}

团队类的属性

#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include "Player.h"

class team 
{
private:
std::ifstream in_file;
std::vector<Player> playing11;
std::string teamname;
std::vector<Player> player;
bool playing;
float matchperformance;
float teamform;
float team_rank_score;
};

我正在使用visual studio express 2013

2 个答案:

答案 0 :(得分:2)

此代码

playing8.push_back(&teams[i]);

使用编译器生成的复制构造函数复制推送回的team类实例。它只是试图复制每个成员。

ifstream没有提供复制构造函数(它已被删除),因此您会收到此错误。

要解决此问题,您需要使用ifstream*指针或ifstream&引用。

答案 1 :(得分:2)

并非每个变量都有是一个类变量。一般来说,变量应尽可能保持在最小范围内。

将您的文件保存为本地变量,不需要将它们作为类字段。