2014-02-09 4 views
1

SDL에 체커 게임을 쓰려고합니다. 나는 내 코드를 컴파일 할 때, 나는이 오류 얻을 : 내가 웹에서 무엇을 찾을 수에서삭제 된 함수 (VS2013)를 참조하려고 시도했습니다.

std::basic_ifstream>::basic_ifstream(conststd::basic_ifstream> &)' : attempting to reference a deleted function

을,이 컴파일이, 어떤 이유로 내 생성자를 삭제 유용하게되었음을 의미 지금은 다시 찾을 수 없습니다 . (네가 나에게 묻는다면 나쁜 조직) 왜 이것이 될 수 있니?

Board.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(); 
}; 

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(); 
     } 
    } 
} 
+0

다른 모든 오후에 C++ 표준 라이브러리를 구현하지 않는 한 오류는 * 사용자 * 생성자에 대한 것이 아닙니다. 그 메시지에 언급 된 학급을 확인할 수 있습니까? –

+0

"이 진단은 컴파일러에서 생성 된 함수 Board :: Board (const Board &)에서 발생했습니다." 내 보드 클래스입니다. – MadDoctor5813

+0

표시되는 코드에서 오류가 발생합니까? 이 코드를 복사하여 복사 할 수 없습니다. 또는 심지어 작동하지 않습니다. 여기서 loaders.h가 누락되었습니다. 또한, http://sscce.org/을 참조하십시오. – rubenvb

답변

4

오류가 발생 당신은 std::ifstream 데이터 멤버가 있고, 당신은 아마 어딘가에 Board을 복사하려고, 또는 때문에 복사 생성자가 액세스 가능해야하는 일부 코드

std::ifstream boardFile; 

Board 컴파일러 제공 복사 생성자는 스트림을 복사하려고하지만 스트림은 복사 가능한 없습니다. 그래서 당신은 뭔가를 영리하게하기 위해 자신의 복사본 생성자를 제공하거나 Board 복사 생성자가 필요한 코드를 제거해야합니다.

+0

ifstream에 대한 포인터를 클래스 멤버로 사용하고 클래스의 생성자/소멸자에서 ifstream을 할당/할당 취소 할 수있는 해결책이 될까요? –