Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio visual studio和linux(eclipse)中的不同结果_Visual Studio_Eclipse_C++ - Fatal编程技术网

Visual studio visual studio和linux(eclipse)中的不同结果

Visual studio visual studio和linux(eclipse)中的不同结果,visual-studio,eclipse,c++,Visual Studio,Eclipse,C++,我的代码在VisualStudio中工作得很好,但在eclipse中运行它时遇到了问题。 在函数中: City* Gps::FindCity(const char* city) { if(city != NULL) { City *tmp = NULL; if (! m_gpsCities.empty()) { for (list<City*>::iterator iter = m_gpsCiti

我的代码在VisualStudio中工作得很好,但在eclipse中运行它时遇到了问题。 在函数中:

City* Gps::FindCity(const char* city)  
 {  
 if(city != NULL)
 {  
      City *tmp = NULL;  
      if (! m_gpsCities.empty())  
      {  
           for (list<City*>::iterator iter = m_gpsCities.begin(); iter != m_gpsCities.end(); iter++) 
           {  
                tmp = (City*)(*iter);  
                if(Vehicle::StringCompare(tmp->GetCityName(),city)==0)  
                return tmp;    
           }  
      }  
 }  
 return NULL;  
}  
City*Gps::FindCity(const char*City)
{  
如果(城市!=NULL)
{  
城市*tmp=NULL;
如果(!m_gpsCities.empty())
{  
对于(列表::迭代器iter=m_gpsCities.begin();iter!=m_gpsCities.end();iter++)
{  
tmp=(城市*)(*iter);
如果(车辆::StringCompare(tmp->GetCityName(),城市)==0)
返回tmp;
}  
}  
}  
返回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;index<min;index++)  
    {  
        if(st1[index]>st2[index])  
            return 1;  
        if(st1[index]<st2[index])  
            return (-1);  
    }  

    delete[] st1;  
    delete[] st2;  

    if(size1==size2)  
        return 0;  
    if(min==size1)  
       return (-1);  
    else  
        return 1;  
}
int-Vehicle::StringCompare(const-char*str1,const-char*str2)//假设所有值都不为空
{  
字符串s1、s2;
char*st1=OrgName(str1),*st2=OrgName(str2);
s1.转让(st1);
s2.分配(st2);
int size1=s1.size(),size2=s2.size(),min=0,index=0;
如果(str1[size1-1]='\r'| | str1[size1-1]='\0'| | str1[size1-1]='\n')
尺寸1-;
如果(str2[size2-1]='\r'| | str2[size2-1]='\0'| | str2[size2-1]='\n')
尺寸2-;
如果(尺寸1>尺寸2)
最小=尺寸2;
其他的
最小=尺寸1;
bool-bigger1=真;
对于(索引=0;索引t2[index])
返回1;
if(st1[index]您只想为您的特定谓词实现,它实际上是
strcmp
的一个变体,具有不太特定的整数输出。请尝试以下操作:

City* Gps::FindCity(const char* MyCityName)  
{  
    if((MyCityName!= NULL)&&(!m_gpsCities.empty())
    {  
        for (list<City*>::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;  
}

可能
Vehicle::StringCompare(tmp->GetCityName(),city)==0
返回true?为什么
StringCompare
Vehicle
的一个成员函数?它没有返回true,因为当我调试时,我看到它在第一次迭代后返回到循环行。这是家庭工作任务的一部分,我选择将函数放在Vehicle中,因为它是我现在意识到的最基本的目标,我没有正确解释调试器在屏幕上显示的内容,它实际上是一个单元素列表。但我需要使用我的比较,我以某种方式进行比较。看起来你只是比较了两个城市的名称。我按照要求的特定方式进行比较
 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; 
 }