C++ 尝试引用已删除的函数(VS2013)

C++ 尝试引用已删除的函数(VS2013),c++,sdl-2,C++,Sdl 2,我想用SDL写一个跳棋游戏。编译代码时,会出现以下错误: std::basic_ifstream>::basic_ifstream(constd::basic_ifstream>&)∶尝试引用已删除的函数 从我在网上看到的情况来看,这意味着编译器出于某种原因删除了我的构造函数,但现在又找不到了。(如果你问我的话,那就是糟糕的组织)为什么会这样 董事会h: #include <fstream> class Board { public: SDL_Surface * boardS

我想用SDL写一个跳棋游戏。编译代码时,会出现以下错误:

std::basic_ifstream>::basic_ifstream(constd::basic_ifstream>&)∶尝试引用已删除的函数

从我在网上看到的情况来看,这意味着编译器出于某种原因删除了我的构造函数,但现在又找不到了。(如果你问我的话,那就是糟糕的组织)为什么会这样

董事会h:

#include <fstream>
class Board
{
public:
    SDL_Surface * boardSurface;
    int boardArray[8][8];
private:
    std::ifstream boardFile;
    SDL_Surface * blackPiece;
    SDL_Surface * whitePiece;
    SDL_Surface * darkSquare;
    SDL_Surface * lightSquare;

public:
    Board(char filename[], SDL_PixelFormat * format);
private:
    void loadFile(char filename[]);
    void makeSurface();
    void debugPrint();
    void debugBlit();
};
#包括
班级委员会
{
公众:
SDL_表面*板表面;
int boardArray[8][8];
私人:
std::ifstream板文件;
SDL_表面*黑色件;
SDL_表面*白板;
SDL_曲面*暗方形;
SDL_表面*lightSquare;
公众:
电路板(字符文件名[],SDL_像素格式*格式);
私人:
无效加载文件(字符文件名[]);
void makeSurface();
void debugPrint();
void debugBlit();
};
Board.cpp:

#include <SDL.h>
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include "board.h"
#include "loaders.h"

Board::Board(char filename[], SDL_PixelFormat * format)
{
    //inits images
    loaders imageLoader;
    blackPiece = imageLoader.load_image("images/blackPiece.png", format);
    whitePiece = imageLoader.load_image("images/whitePiece.png", format);
    darkSquare = imageLoader.load_image("images/darkSquare.png", format);
    lightSquare = imageLoader.load_image("images/lightSquare.png", format);
    boardSurface = SDL_CreateRGBSurface(0, 780, 480, 8, 0, 0, 0, 0);
    loadFile(filename);
    debugPrint();
    debugBlit();
}
void Board::loadFile(char filename[])
{
    boardFile.open(filename);
    char currentLine[9] = {};
    for (int line = 0; line <= 7; line++)
    {
        boardFile.getline(currentLine, 9);
        for (int square = 0; square <= 7; square++)
        {
            int currentSquare = (int)currentLine[square] - '0'; 
            boardArray[line][square] = currentSquare;
        }
    }
}

void Board::makeSurface()
{

}

void Board::debugPrint()
{
    for (int line = 0; line <= 7; line++)
    {
        for (int square = 0; square <= 7; square++)
        {
            std::cout << boardArray[line][square];
        }
        std::cout << std::endl;
    }
}

void Board::debugBlit()
{
    for (int y = 0; y <= 4; y++)
    {
        if (SDL_BlitSurface(blackPiece, NULL, boardSurface, NULL) != 0)
        {
            std::cout << SDL_GetError();
        }
    }
}
#包括
#包括
#包括
#包括
#包括“board.h”
#包括“loaders.h”
Board::Board(字符文件名[],SDL_像素格式*格式)
{
//初始化图像
装载机;
blackPiece=imageLoader.load_图像(“images/blackPiece.png”,格式);
whitePiece=imageLoader.load_图像(“images/whitePiece.png”,格式);
darkSquare=imageLoader.load_image(“images/darkSquare.png”,格式);
lightSquare=imageLoader.load_图像(“images/lightSquare.png”,格式);
boardSurface=SDL_CreateRGB曲面(0,780,480,8,0,0,0);
加载文件(文件名);
debugPrint();
debugBlit();
}
无效板::加载文件(字符文件名[])
{
打开(文件名);
字符currentLine[9]={};

对于(int line=0;line而言,发生错误的原因是您有一个
std::ifstream
数据成员,并且您可能正试图在某个地方复制
线路板,或者某些代码需要复制构造函数才能访问

std::ifstream boardFile;

Board
编译器提供的复制构造函数尝试复制流,但流不可复制。因此,您必须提供自己的复制构造函数来做一些巧妙的事情,或者删除需要
Board
复制构造函数的代码。

发生错误的原因是您有
std::ifstream
数据内存ber,您可能正试图在某个地方复制
,或者有一些需要复制构造函数才能访问的代码

std::ifstream boardFile;

< > >代码>板>代码>编译器提供复制构造函数试图复制流,但流不是可复制的。因此,您必须提供自己的复制构造函数来做一些聪明的事情,或者删除需要<代码>板> /Cord>复制构造函数的代码。< /P>除非每隔一个下午执行C++标准库,否则出错。或者与构造函数无关。您能识别该消息中提到的类吗?“此诊断发生在编译器生成的函数Board::Board(const Board&)中。”这是我的板卡类,我想,你在哪里显示代码出错?我不能复制粘贴这个代码并使它工作。或者甚至不工作。你丢失了加载器。H。这里,请看我是在哪里复制板,是的。我在它的位置做了其他事情,错误已经消失。除非你在其他的时间之后实现C++标准库。oon,此错误与构造函数无关。您能识别该消息中提到的类吗?“此诊断发生在编译器生成的函数板::板(const Board&)中。”我想这是我的board类。在您显示的代码中,哪里发生了错误?我无法复制粘贴此代码并使其工作。或者甚至无法工作。您缺少加载程序。这里是h。另外,请查看我在某处复制board,是的。我在其位置执行了其他操作,错误消失了。是否使用指向ifstream的指针作为类成员和al在类的构造函数/析构函数中定位/取消定位ifstream是可接受的解决方案?使用指向ifstream的指针作为类成员并在类的构造函数/析构函数中分配/取消定位ifstream是可接受的解决方案吗?