-1

Eclipse 在 push_back 行上显示以下错误:

无效参数的候选者是: void push_back(const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &)

我的问题是,如何确保向量包含字符串而不是 basic_strings?

我在另一段代码中发现我想访问这个向量,但我在编译它时遇到了麻烦,它似乎后来知道它是一个 basic_string 而不是“std::string”,在当前上下文中我知道我只会使用 char 但我想将超类保留在那里,以便将来如果我换成 w-char 等,我不必调整任何东西。

我已经尝试将其转换为字符串,但这似乎不起作用

 std::string test = (std::string)tokens[1];

最终目标是用该向量构造一些对象

if(tokens->size() == 3){
TestObject test = new TestObject(tokens[1],)tokens[2])
}

这是我在 Stackoverflow 上找到的函数,由 stackoverflow 用户 Function Origin提出

感谢您的帮助。

void TestClass::splitString(const std::string &str, std::vector<std::string>* tokens){
    boost::char_separator<char> sep(",");

    std::string separator;
    boost::tokenizer< boost::char_separator<char> > tok(str,sep);
    for(boost::tokenizer< boost::char_separator<char> >::iterator it=tok.begin(); it != tok.end(); ++it)
    {    
      tokens->push_back(*it);
    }    
}

没有匹配函数调用'TestObject::defineX(std::basic_string*)'</p>

accessing with defineX(vector[1].data());

没有匹配函数调用'TestObject::defineX(std::vector >&)'</p>

accessing with defineX(vector[1]);

该函数的定义声明如下(也许这是问题所在?):

typedef std::string td_MAP_KEY;
td_MAP_VALUE * TestObject::defineX(td_MAP_KEY key);

我这样调用该方法,如果您热衷于编译它,它应该可以工作,不幸的是我无法在此处粘贴完整的代码,但下面的代码应该这样做:

std::string x = "one,two,three,four"
std::vector<std::string> * splittedString = new std::vector<std::string>;
splitString(x,splittedString);
TestObject * object = new TestObject();
object->defineX(splittedString[1]);
4

1 回答 1

0

这段代码的问题:

std::vector<std::string> * splittedString = new std::vector<std::string>;
    :
object->defineX(splittedString[1]);

是您定义splittedString为向量指针,并将其指向单个向量(而不是向量数组),然后尝试访问(不存在的)向量数组的第二个元素。你可能想要

object->defineX((*splittedString)[1]);

它取消引用向量指针,然后获取向量的第二个元素。

于 2012-07-21T18:43:30.090 回答