Visual StudioとLinux(Eclipse)で異なる結果

c++ eclipse visual-studio
Visual StudioとLinux(Eclipse)で異なる結果

私のコードはVisual Studioで完全に動作しますが、Eclipseで実行すると問題が発生します。 関数内:

City* Gps::FindCity(const char* city)
 {
 if(city != NULL)
 {
      City *tmp = NULL;
      if (! m_gpsCities.empty())
      {
           for (list::iterator iter = m_gpsCities.begin(); iter != m_gpsCities.end(); iter++)
           {
                tmp = (City*)(*iter);
                if(Vehicle::StringCompare(tmp->GetCityName(),city)==0)
                return tmp;
           }
      }
 }
 return NULL;
}

問題は、最初の反復の後、リストに1つ以上の要素がある間、ループを終了し、リスト内の他の要素を越えないことです。

stringcompare:

 int Vehicle::StringCompare(const char* str1, const char* str2)//assuming all not null
 {
    string s1, s2;
    char *st1 = OrgName(str1),*st2 = OrgName(str2);

    s1.assign(st1);
    s2.assign(st2);

    int size1 = s1.size(), size2 = s2.size(), min = 0, index =0;

    if(str1[size1 - 1] == '\r' || str1[size1 - 1] == '\0' || str1[size1 - 1] == '\n')
        size1--;
    if(str2[size2 - 1] == '\r' || str2[size2 - 1] == '\0' || str2[size2 - 1] == '\n')
        size2--;

    if(size1>size2)
        min=size2;
    else
        min=size1;

    bool bigger1 = true;
    for(index=0;indexst2[index])
            return 1;
        if(st1[index]

  0  0


ベストアンサー

特定の述語に対してhttp://www.sgi.com/tech/stl/find_if.html [find_if]を実現したいだけです。これは実際には、より具体的でない整数出力を持つ` strcmp`のバリアントです。 これを試して:

City* Gps::FindCity(const char* MyCityName)
{
    if((MyCityName!= NULL)&&(!m_gpsCities.empty())
    {
        for (list::const_iterator iter=m_gpsCities.begin(); iter!=m_gpsCities.end(); ++iter)
        {
            const char* MyCityTempNameChar = iter->GetCityName();
            const char * st1 = OrgName(MyCityName),
            const char * st2 = OrgName(MyCityTempName);
            const int predicate = strcmp(st1, st2);
            if(predicate==0)
            {
                return (*iter);
            }
        }
    }
    return NULL;
}

または、次のように述語を調整します。

 int Vehicle::StringCompare(const char* str1, const char* str2)
 {
    const char * st1 = OrgName(str1),
    const char * st2 = OrgName(str2);
    const int predicate = strcmp(st1, st2);
    return predicate;
 }

0


タイトルとURLをコピーしました