0

我有一个包含 boost::tokenizer 的类的简单代码示例。

MyTokenizer.h

#pragma once

#include <iostream>
#include <boost/tokenizer.hpp>

class MyTokenizer
{
public:
    typedef boost::tokenizer< boost::escaped_list_separator<char> > TokType;

    MyTokenizer(std::string);
    ~MyTokenizer() {};
    void printTok();

private:
    const TokType tok_;

};

MyTokenizer.cpp

#include "MyTokenizer.h"


MyTokenizer::MyTokenizer(std::string input) :
tok_(input)
{
    std::cout << "Created tokenizer from: " << input << std::endl;
    for (TokType::iterator it = tok_.begin(); it != tok_.end(); ++it){
        std::cout << *it << std::endl;
    }
}

void MyTokenizer::printTok(){
    std::cout << "printing tokens" << std::endl;
    for (TokType::iterator it = tok_.begin(); it != tok_.end(); ++it){
        std::cout << *it << std::endl;
    }
}

主文件

#include "MyTokenizer.h"

int main(void){
    std::string input("a,b,c");
    MyTokenizer tok(input);
    tok.printTok();
}

当我运行此示例时,它可以通过构造函数正常运行,在循环中打印预期的标记,但在调用 printTok() 时会出现此错误

在此处输入图像描述

似乎我无法在构造函数之外创建 MyTokenizer 的迭代器。

编辑

我将 printTok() 方法更改为更简单,同时仍然抛出相同的错误,现在看起来像这样。

void MyTokenizer::printTok(){
    TokType::iterator it = tok_.begin();
}
4

1 回答 1

1

Ok I fixed this myself. The problem was that the string I built my tokenizer from was being de-allocated at the end of the constructor. I fixed it by storing a copy of the input string in my class and building my tokenizer from this string.

于 2015-03-17T19:37:47.230 回答