0

Emericc の斧を使用してプロジェクトのクラスを作成しています。このクラスの目標は、エラー フレームを使用してメッセージを返すことです。STL の std::string 変数のみを使用する必要があります。ただし、IDE は検索関数の 1 つの後の文字列操作を認識しません。

私はフランス人なので、使用する変数は私の言語であることに注意してください (コードは非常に単純です)。

私が遭遇したエラーは、この関数にあります:

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にあると思い始めています。これまでのところ、ファイルをコピーして新しいフォルダーに移動しようとしましたが、誤動作には影響しません。

4

1 に答える 1

1

push_back() 関数を使用したことが原因でエラーが発生したことがわかりました。一度に 1 文字しかプッシュバックできません。
1 つの文字を含むように作成された 1 つのメモリ位置に複数の値を入力することは、良い考えではありませんでした。

どうやら、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.");
于 2015-01-19T13:37:27.437 に答える