std::string C++Builder 6 上的操作错误
std::string manipulating error on C++Builder 6
我正在为一个使用 Emeric 斧头的项目创建 class。此 class 的目标是使用错误帧来 return 一条消息。我必须只使用 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。
到目前为止,我已经尝试将文件复制并移动到新文件夹中,但故障没有受到影响。
原来错误来自于我使用 push_back() 函数:我一次只能推回一个字符。
在一个内存位置输入多个值,使其包含一个字符,这不是一个好主意。
显然,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.");
我正在为一个使用 Emeric 斧头的项目创建 class。此 class 的目标是使用错误帧来 return 一条消息。我必须只使用 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。 到目前为止,我已经尝试将文件复制并移动到新文件夹中,但故障没有受到影响。
原来错误来自于我使用 push_back() 函数:我一次只能推回一个字符。
在一个内存位置输入多个值,使其包含一个字符,这不是一个好主意。
显然,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.");