C ++ Builder 6上的std :: string操作错误

时间:2015-01-19 10:20:26

标签: c++ string frame c++builder c++builder-6

我正在使用Emericc ax为项目创建一个类。此类的目标是使用错误帧来返回消息。我只能使用STL的std :: string变量。 但是,IDE在其中一个查找函数之后无法识别任何字符串操作。

请注意我是法语,所以我使用的变量都是我的语言(代码非常简单)。

我遇到的错误是在这个函数中:

string ErrMericc::ErrTrame(string trame)
{
  /*
   trame(fr) = frame(eng)
   virgule(fr) = comma(eng) [I shortened "virgule" to "virg" in a variable]
  */

  this->trame=trame;
  trame.find('!', posExcl); //this marks the beginnig of the error number

  if(posExcl == string::npos)
  {
    trame.clear(); //clearing in case the variable is not empty
    //in case this is not an error frame
    trame.push_back("Erreur 200 : "+errors[200]+". La trame envoyée n'est pas une trame d'erreur."); 
    return trame; 
  }
  else
  {
    trame.find(',', posVirg); //here is the error
    //starting here, no function using a string is recognized by the IDE
    //and I don't find why
    nb.push_back(trame.substr(posExcl+2, posVirg)); //unrecognized push_back() and substr()

    errNb=StrToInt(trame.c_str());
    trame=errors[errNb];
    return "Erreur "+IntToStr(errNb)+" : "+trame;
  }

}

C ++ Builder 6告诉我:[C ++错误] ErrMericc.cpp(1):由于源代码错误,无法调用代码执行。 当我双击此错误消息时,它会将我带到文件的第一行源代码中。

错误消息似乎不会停止弹出,除非我注释掉" trame.find(',',posVirg);"。

请您解释一下我的错误在哪里?

修改

看起来C ++ Builder 6并不像代码行那样......

这有效:

    trame.find(',', posVirg); //here is the error
    //starting here, no function using a string is recognized by the IDE
    //and I don't find why
    nb.push_back(trame.substr(posExcl+2, posVirg)); //unrecognized push_back() and substr()

这不是:

    //here is the error
    //starting here, no function using a string is recognized by the IDE
    //and I don't find why
    trame.find(',', posVirg); 
    nb.push_back(trame.substr(posExcl+2, posVirg)); //unrecognized push_back() and substr()

怪异。

我开始认为问题来自IDE。 到目前为止,我已尝试将文件复制并移动到新文件夹中,但故障并未受到影响。

1 个答案:

答案 0 :(得分:1)

原来我使用push_back()函数时出错:我一次只能回退一个字符。
在一个内存位置输入多个值,包含一个char,不是一个好主意。

显然,C ++ Builder 6只是不知道该怎么做,因为错误来自我在stl中使用的东西。

所以我不应该这样做:

trame.push_back("Erreur 200 : "+errors[200]+". La trame envoyée n'est pas une trame d'erreur.");

但是:

trame = string("Erreur 200 : ") + errors[200] + string(". La trame envoyée n'est pas une trame d'erreur.");