我正在为虚拟锦标赛编写代码。问题是团队类有一个 ifstream 对象,我知道流对象没有复制构造函数,因此我将 play8 从团队对象的 vector 转换为指向对象的指针,这样团队对象就不会被复制。但现在我收到这个错误



如何在不从团队类中删除 ifstream 对象的情况下解决此问题?
这是锦标赛.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。

最佳答案

这段代码

playing8.push_back(&teams[i]);

使用编译器生成的复制构造函数制作 team 类实例的拷贝。它试图简单地复制每个成员。
ifstream 不提供复制构造函数(已删除),因此您会收到此错误。

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

关于c++ - ifstream 尝试引用已删除的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30555131/

10-13 08:27