2010-11-26 42 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