Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.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
比较两个字符串C++时的错误输出_C++_String_Vector_Iterator_Compare - Fatal编程技术网

比较两个字符串C++时的错误输出

比较两个字符串C++时的错误输出,c++,string,vector,iterator,compare,C++,String,Vector,Iterator,Compare,我有一个类CPerson,简单来说,它是这样的: CPerson { public: CPerson(); pair<string, string> CP_surname_name; vector<CCar> CP_CarList; }; 我已重写运算符

我有一个类CPerson,简单来说,它是这样的:

CPerson
{
public:
   CPerson();
   pair<string, string> CP_surname_name;
   vector<CCar> CP_CarList;
};
我已重写运算符<,因此排序很好。 但当我需要检查时,如果姓氏与CP姓氏完全相同,请:

if(surname_name == (*it).CP_surname_name){...}
即使它们是一样的,它也给我错误的感觉。 我已经试过了:

if(surname_name.first == (*it).CP_surname_name.first && surname_name.second == (*it).CP_surname_name.second){...}
它的工作原理是一样的。 我还尝试了strcmp,但它给了我错误,因为我使用的是字符串,而不是char*,所以我尝试了append.c_str来重新键入它,这也给了我错误的结果。字符串中的比较类也不起作用。 谢谢你的帮助,很抱歉我的英语不好

代码部分:

bool CRegister::AddCar( const string & rz, const string & name, const string & surname )
{
pair<string, string> SurName = make_pair(surname, name);
CCar newCar = CCar(rz, SurName);

if(CR_people.size() == 0 && CR_cars.size() == 0)
{
    CR_people.push_back(CPerson(name,surname,rz));
    CR_cars.push_back(newCar);
    return true;
}
else if(CR_people.size() != 0 && CR_cars.size() != 0)
{
    auto it = lower_bound(CR_cars.begin(), CR_cars.end(), rz);

    if( it < CR_cars.end() && (*it).CC_rz.c_str() == rz.c_str()){return false;}
    CR_cars.insert(it, newCar);

    auto it2 = lower_bound(CR_people.begin(), CR_people.end(), SurName);

    if( (*it2).CP_SnNm.first.c_str() == SurName.first.c_str() && (*it2).CP_SnNm.second.c_str() == SurName.second.c_str())
    {
        cout << "Cannot get here" << endl;
        if((*it2).CPAddCar(rz))
            return true;
        return false;
    }
    else
    {
        CR_people.insert(it2, CPerson(name, surname, rz));
        return true;
    }

    throw "Error, Add Car to register";
    return false;
}
return false;
}


代码的意思是,当我的列表中已经有人时,我只需将CCar添加到CPersons车辆列表中,当没有与th参数相等的人时,我会将带有CCar的CPerson添加到列表中。

如何声明姓氏?它的内容是什么?它是如何初始化的?您是如何实现运算符的<?pair-name\u-name=make\u-pairsurname,name,其中姓氏和名称是用户输入的字符串。是的,我已经覆盖了运算符<的空气类型。作为一个健全的检查,您是否确保使用make_pairsurname,name来存储输入的名称,而不是make_pairname,姓氏?而不是解释您已经做了什么,而是显示实际的代码。你所描述的听起来应该有用。如果没有,则表示代码错误。但是如果没有看到代码,没有人能告诉你它出了什么问题。
bool CRegister::AddCar( const string & rz, const string & name, const string & surname )
{
pair<string, string> SurName = make_pair(surname, name);
CCar newCar = CCar(rz, SurName);

if(CR_people.size() == 0 && CR_cars.size() == 0)
{
    CR_people.push_back(CPerson(name,surname,rz));
    CR_cars.push_back(newCar);
    return true;
}
else if(CR_people.size() != 0 && CR_cars.size() != 0)
{
    auto it = lower_bound(CR_cars.begin(), CR_cars.end(), rz);

    if( it < CR_cars.end() && (*it).CC_rz.c_str() == rz.c_str()){return false;}
    CR_cars.insert(it, newCar);

    auto it2 = lower_bound(CR_people.begin(), CR_people.end(), SurName);

    if( (*it2).CP_SnNm.first.c_str() == SurName.first.c_str() && (*it2).CP_SnNm.second.c_str() == SurName.second.c_str())
    {
        cout << "Cannot get here" << endl;
        if((*it2).CPAddCar(rz))
            return true;
        return false;
    }
    else
    {
        CR_people.insert(it2, CPerson(name, surname, rz));
        return true;
    }

    throw "Error, Add Car to register";
    return false;
}
return false;