gpt4 book ai didi

c++ - 字符串迭代器不兼容 boost::tokenizer

转载 作者:行者123 更新时间:2023-11-28 06:22:23 25 4
gpt4 key购买 nike

我有一个包装 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;
}
}

main.cpp

#include "MyTokenizer.h"

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

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

enter image description here

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

编辑

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

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

最佳答案

好的,我自己解决了这个问题。问题是我构建分词器的字符串在构造函数的末尾被取消分配。我通过在我的类中存储输入字符串的拷贝并从该字符串构建我的分词器来修复它。

关于c++ - 字符串迭代器不兼容 boost::tokenizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29107125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com