2010-11-26 64 views
0

header.h字符串流串邏輯C++

#include <iostream> 
#include <vector> 

class CombatLine{ 
    std::stringstream Line;  
    std::vector<std::string> TokenLine; 
    void SetLine(std::string s){ 
     Line<<s; 
    }  
public: 
void SetTokenLine(){ 
    int i=0;  
    while(i<5){ 
     Line>>TokenLine[i]; 
     i++;}  
    TokenLine.resize(i); 
    for(int j=0;j<5;j++) 
     cout<<TokenLine[j];} 

的main.cpp

#include "Header.h" 
using namespace std; 

int main() { 
    CombatLine Line1; 
    Line1.SetLine("[Combat] A bird attacks -Anthrax- and misses (dodge)."); 
    Line1.SetTokenLine(); 
} 

此建立,但我得到這個運行時錯誤,/cygdrive/C/Program Files/NetBeans 6.9.1/ide/bin/nativeexecution/dorun.sh: line 33: 4500 Segmentation fault <core dumped> sh "$<SHFILE>"

我知道它有怎麼辦我操縱SetTokenFile中的字符串流&,但我似乎無法查明什麼。

這是較大項目的一小部分。總的來說,我將解析一個動態文本文件,然後對整個文件的內容進行比較。

+2

**請格式化代碼時,請使用降價代碼塊代替HTML;否則像代碼塊中的每個`<`都會被刪除(更別說無效的HTML生成了)。 (另外,**使用命名空間標準; **需要死一個可怕的死亡) – 2010-11-26 20:35:45

回答

5

您不能直接寫入TokenLine[i],因爲它在CombatLine構造函數中初始化爲空的vector。如果您在閱讀每行時構建矢量,則不需要resize

試試這個:

void SetTokenLine(){ 
    int i=0;  
    string nextLine; 
    while(i<5){ 
     Line>>nextLine; 
     TokenLine.push_back(nextLine); 
     i++;}  
    for(int j=0;j<5;j++) 
     cout<<TokenLine[j];} 

或者,你可以預先分配在默認CombatLine構造的vector 5項,但如果你要處理變化的令牌數量,這是脆。隨着下面,你可以寫從stringstream直接進入TokenLine[i]如果0 < =我< = 4

CombatLine::CombatLine() : TokenLine(5) 
{ 
} 
+0

非常感謝! – Malaken 2010-11-27 03:22:19

1

您需要首先調整TokenLine,然後寫入的內容,或者更好的習慣是使用push_back,如果需要將調整大小。

+0

非常感謝! – Malaken 2010-11-27 03:20:52