2

このメソッドは、渡された char* 配列が map に存在するにもかかわらず、それを見つけることができません。マップで char* を std::string に置き換えたとき。コードは正常に動作します。

static void CreateTranslationMap();
static UString FindTranslatedString(char* propertyName);
static std::map<char*,UString> TranslationMap ;

static void CreateTranslationMap()
{
     UString engString("TextAlignmentPosition");
     char* transString= MSGTXT("TextAlignmentPosition");

    TranslationMap.insert(std::pair<char*,UString>(transString,engString));
}



UString FindTranslatedString(char* propertyName)
{
    UString NotFound("CannotFind");
    std::map<char*, UString>::iterator itr;
    itr = TranslationMap.begin();
    itr = TranslationMap.find(propertyName);
    if(itr!= TranslationMap.end())
    {
        return itr->second;
    }
    else if(itr== TranslationMap.end())
    {
        return NotFound;
    }

}
4

5 に答える 5

0

char* を const char* に置き換えるだけです。マップ データ型は常に文字列を const 形式で受け取るためです。私はあなたの例を取り上げましたが、それは私の端末で実行されています。したがって、新しいコードは次のとおりです。

  #include<iostream>

   using namespace std;
   static void CreateTranslationMap();
   static string FindTranslatedString(const char* propertyName);
   static std::map<const char*,string> TranslationMap ;

  static void CreateTranslationMap()
   {
      string engString("TextAlignmentPosition");
      const char* transString= ("1");
      TranslationMap.insert(std::pair<const char*,string>(transString,engString));
   }


   string FindTranslatedString(const char* propertyName)
    {
        string NotFound("CannotFind");
        std::map<const char*, string>::iterator itr;
       itr = TranslationMap.begin();
       itr = TranslationMap.find(propertyName);
        if(itr!= TranslationMap.end())
        {
            return itr->second;
        }
       else if(itr== TranslationMap.end())
      {
         return NotFound;
       }

  }

 int main() 
  {

    CreateTranslationMap();
    string s =FindTranslatedString("1");
    cout<<s<<endl;

    return 0;
  } 
于 2013-10-18T07:00:15.370 に答える