header.h
#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];}
Run Code Online (Sandbox Code Playgroud)
main.cpp中
#include "Header.h"
using namespace std;
int main () {
CombatLine Line1;
Line1.SetLine("[Combat] A bird attacks -Anthrax- and misses (dodge).");
Line1.SetTokenLine();
}
Run Code Online (Sandbox Code Playgroud)
这构建但我收到此运行时错误, /cygdrive/C/Program Files/NetBeans 6.9.1/ide/bin/nativeexecution/dorun.sh: line 33: 4500 Segmentation fault <core dumped> sh "$<SHFILE>"
我知道它与我在SetTokenFile中操作字符串和流的方式有关,但我似乎无法确定是什么.
这是一个较大项目的一小部分.总的来说,我将解析一个动态文本文件,然后对整个文件的内容进行比较.
您无法直接写入,TokenLine[i]因为它vector在CombatLine构造函数中初始化为空.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];}
Run Code Online (Sandbox Code Playgroud)
或者,您可以vector在默认CombatLine构造函数中预分配5个条目,但如果要处理的标记数量发生变化,这会很脆弱.使用下面的内容,您可以直接从stringstreaminto中写入TokenLine[i]0 <= i <= 4.
CombatLine::CombatLine() : TokenLine(5)
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
603 次 |
| 最近记录: |