ifstream 试图引用已删除的函数
ifstream attempting reference to a deleted function
我正在为虚拟锦标赛编写代码。问题是团队 class 有一个 ifstream 对象,我知道流对象没有复制构造函数,因此我将 play8 从团队对象的向量转换为指向对象的指针,这样团队对象就不会被复制。但是现在我得到这个错误
Error 16 error C2280:
'std::basic_ifstream<char,std::char_traits<char>>::basic_ifstream(const std::basic_ifstream<char,std::char_traits<char>> &)' :
attempting to reference a deleted function
c:\program files (x86)\microsoft visual studio 12.0\vc\include\xmemory0 592 1 Assignment3
如何在不从团队 class 中删除 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);
}
}
select 播放 8 的代码:
void Tournament::selectPlaying8(){
for (int i = 0; i < 7; i++) {
playing8.push_back(&teams[i]);
playing8[i]->set_playing();
}
}
球队属性class
#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。
这个代码
playing8.push_back(&teams[i]);
使用编译器生成的复制构造函数复制 team
class 实例。它只是尝试复制每个成员。
ifstream
不提供复制构造函数(已删除),因此会出现此错误。
要解决此问题,您需要使用 ifstream*
指针或 ifstream&
引用。
并非每个变量 都 是 class 变量。一般来说,变量应该保持在尽可能小的范围内。
将文件保存为 local 变量,无需将它们保存为 class 字段。
我正在为虚拟锦标赛编写代码。问题是团队 class 有一个 ifstream 对象,我知道流对象没有复制构造函数,因此我将 play8 从团队对象的向量转换为指向对象的指针,这样团队对象就不会被复制。但是现在我得到这个错误
Error 16 error C2280: 'std::basic_ifstream<char,std::char_traits<char>>::basic_ifstream(const std::basic_ifstream<char,std::char_traits<char>> &)' : attempting to reference a deleted function c:\program files (x86)\microsoft visual studio 12.0\vc\include\xmemory0 592 1 Assignment3
如何在不从团队 class 中删除 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);
}
}
select 播放 8 的代码:
void Tournament::selectPlaying8(){
for (int i = 0; i < 7; i++) {
playing8.push_back(&teams[i]);
playing8[i]->set_playing();
}
}
球队属性class
#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。
这个代码
playing8.push_back(&teams[i]);
使用编译器生成的复制构造函数复制 team
class 实例。它只是尝试复制每个成员。
ifstream
不提供复制构造函数(已删除),因此会出现此错误。
要解决此问题,您需要使用 ifstream*
指针或 ifstream&
引用。
并非每个变量 都 是 class 变量。一般来说,变量应该保持在尽可能小的范围内。
将文件保存为 local 变量,无需将它们保存为 class 字段。