2013-02-08 50 views
1

我想用一個文本文件來初始化一個將被用來初始化一個2D矢量的結構,是的,我知道它很複雜,但最終還是會有很多數據需要處理。問題在於getline,我在其他代碼中以這種方式使用它,但由於某種原因它拒絕在這裏工作。我不斷收到一個參數錯誤和模板錯誤。任何提示將非常感激。getline不與fstream一起工作

#include <fstream> 
#include <string> 
#include <vector> 
#include <iostream> 

using namespace std; 

const int HORIZROOMS=10; 
const int VERTROOMS=10; 
const int MAXDESCRIPTIONS=20; 
const int MAXEXITS=6; 

struct theme 
{ 
    string descriptions[MAXDESCRIPTIONS]; 
    string exits[MAXEXITS]; 
}; 

void getTheme(); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    getTheme(); 
    vector<vector <room>> rooms(HORIZROOMS, vector<room>(VERTROOMS)); 
    for (int i=0; i<HORIZROOMS; i++) 
    { 
     for (int j=0; j<VERTROOMS; j++) 
     { 
      cout<<i<<" "<<j<<" "<<rooms[i][j].getRoomDescription()<<endl; 
     } 
    } 
    return 0; 
} 

void getTheme() 
{ 
    theme currentTheme; 
    string temp; 
    int numDescriptions; 
    int numExits; 
    ifstream themeFile("zombie.txt"); 
    getline(themeFile, numDescriptions, ','); 
    for (int i=0; i<numDescriptions; i++) 
    { 
     getline(themeFile, temp, ','); 
     currentTheme.descriptions[i]=temp; 
    } 
    getline(themeFile, numExits, ','); 
    for (int i=0; i<numExits; i++) 
    { 
     getline(themeFile, temp, ','); 
     currentTheme.exits[i]=temp; 
    } 
    themeFile.close(); 
} 
+1

你只能在字符串中使用'getline'。 – chris 2013-02-08 17:12:49

+0

我可以建議像[tinyXML](http://sourceforge.net/projects/tinyxml/) – aiao 2013-02-08 17:15:13

回答

2

std::getline用於從流提取到std::string。當您提取到numDescriptionsnumExits時,您實際需要的是operator>>。例如,

themeFile >> numDescriptions; 

這將自動停止提取在以下,。但是,你需要跳過這個逗號,如果你不希望它出現在未來std::getline提取:

themeFile.ignore(); 

或者,你可以有一個std::string numDescriptionsString你做std::getline(themeFile, numDescriptionsString, ',')與和然後再轉換到std::string一個intstd::stoi

getline(themeFile, numDescriptionsString, ','); 
numDescriptions = std::stoi(numDescriptionsString); 

我會說這是醜陋的,但。

+0

這樣的完美,解決了這個問題,現在繼續使用它來創建我的矢量對象的問題。有時候我希望我仍然在使用python。 – Modred 2013-02-08 17:20:00

+0

@Modred祝你好運 - 它不應該太難。你得到的練習越多,用C++就會越好。 Python也是一門偉大的語言。無論如何,如果我的回答有幫助,不要忘記接受它。謝謝。 – 2013-02-08 17:28:58