2010-11-26 13 views
0

がheader.hにstringstream文字列、論理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の代わりにmarkdown codeblocksを使用してください。さもなければ、コードブロック内のすべての '<'のようなものが削除されます(無効なHTMLは生成されません)。 (また、**名前空間の標準を使用して、**恐ろしい死亡する必要があります) –

答えて

5

あなたのCombatLineコンストラクタに空のvectorとして初期化されているため、TokenLine[i]に直接書き込むことはできません。各行を読み上げるときにベクターを構築する場合は、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つのエントリを事前に割り当てることができます。あなたが最初のTokenLineのサイズを変更して、内容に記述する必要がある、またはより良い習慣を使用することです0 < = I = 4 <

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

ありがとう! – Malaken

1

場合は、以下を使用すると、TokenLine[i]stringstreamから直接書き込むことができますpush_back。必要に応じてサイズが変更されます。

+0

ありがとうございました! – Malaken