2013-11-14 1 views
0

보드 게임 (이름, 연도, 점수)에 대한 정보를 보유하고있는 목록을 만들고 있습니다. .csv 파일에서 정보를 검색하고 해당 정보를 기반으로 구조체를 만든 다음 구조체를 목록에 추가합니다. 문서가 읽히기 전까지는이 작업을 계속합니다. 문제는 목록의 push_back 메소드가 작동하지 않는다는 것입니다. 다음은 목록 클래스의 헤더입니다. 참고 BoardGame은 사용자 지정 구조체입니다. BoardGame (wstring 이름, int 년, 부동 소수 점수).C++ 맞춤 구조체가 포함 된 목록에 push_back을 사용할 수 없습니다.

#pragma once 
#include "GameEngine.h" 
#include "BoardGame.h" 
#include <list> 

class BoardGameList 
{ 
public: 
    BoardGameList() {} 
    virtual ~BoardGameList() {} 
// Methods 
    void Load(const tstring& fileName); 
// Members 
private: 
    std::list<BoardGame> m_Games; 
}; 

cpp 파일. 어쩌면 내가 목록을 잘못 만든거야? 프로그램을 실행

#include "BoardGameList.h" 
#include <fstream> 

void BoardGameList::Load(const tstring& fileName) 
{ 
    tifstream file(fileName); 
    tstring line; 

    if(!file) 
    { 
    GAME_ENGINE->MessageBox(_T("Error: The file could not be found!")); 
    } 
    else 
    { 
    tstring name; 
    tstring year; 
    tstring score; 

    while(!(file.eof())) 
    { 
     getline(file,line); 
     year = line.substr(0,4); 
     score = line.substr(5,5); 
     name = line.substr(11,line.find(_T("\n"))); 

     float numberScore = std::stof(score); 
     int numberYear = std::stoi(year); 

     m_Games.push_back(BoardGame(name,numberYear,numberScore)); 
    } 
    } 
} 

자체 내 생각 "목록"클래스에 다음 코드로 날 리드 오류 (처리되지 않은 예외)을 트리거합니다.

_Unchecked_iterator _Unchecked_end() 
    { // return unchecked iterator for end of mutable sequence 
    return (_Unchecked_iterator(this->_Myhead, this)); 
    } 

왜 내 목록에 항목을 추가 할 수 없습니까? 나는 더 많은 것을 추가 할 수 있기 전에 아마도 요소가 필요한지 검사하기 위해 생성자에서 무언가를 추가하려고 시도했다. 그러나 심지어 브레이크 포인트를 사용하면 메모리를 읽을 수 없다는 것을 보여 주었다.

미리 감사드립니다.

편집 : 보드 게임의 헤더

#pragma once 

#include "GameEngine.h" 
struct BoardGame 
{ 
BoardGame(tstring name, int year, float score); 

//Methods 
tstring operator<<(BoardGame rhs); 
//Members 
tstring m_Name; 
int m_Year; 
float m_Score; 
}; 
+3

'BoardGame'의 헤더를 게시 할 수 있습니까? 코드를 다시 만들면 코드를 줄일 수 있다면 좋을 것입니다. – TAS

+0

어떤 std 라이브러리를 사용하고 있습니까? 어느 컴파일러? 그것의 버전? – Walter

+0

'BoardGame :: BoardGame (BoardGame const &)'가 던지고있을 수 있습니까? 그렇지 않으면 오작동하고 있습니까? – Walter

답변

1

어떤 예외 발생되고있다? 이는 문제를 디버깅하는 데 중요합니다.

name = line.substr(11,line.find(_T("\n"))); 

은 후행 줄 바꿈없이 라인에서 예외가 발생합니다, 이하 11 자까지 모든 라인 : 정보없이

내 추측이 라인입니다.