C ++ Vector Find()重载运算符 - 错误

时间:2016-06-02 03:52:26

标签: c++ vector find operator-overloading

我在编译时收到了未定义的架构错误符号。

必须使用Vector,Find()算法和非成员重载的运算符函数。

有关错误的一些指导将不胜感激。

  #include <stdio.h>
  #include <iostream>
  #include <stdexcept>
  #include <vector>
  #include <algorithm>
  #include <string>

  using namespace std;

  struct person
  {
     char firstInitial;
     string firstName;

     person(const char fi, const string fn)
     {
        firstInitial = fi;
        firstName = fn;
     };

     char getInitial()
     {
        return firstInitial;
     };

     string getName()
     {
        return firstName;
     };

     bool operator==(const person& r);

  };

  bool operator==(const person& r, const person& x)
  {
     return x.firstInitial == r.firstInitial;
  }



  int main (int argc, char *argv[])
  {
     vector<person> myvector;
     vector<person>::iterator itr;

     myvector.push_back(person('j', "john"));
     myvector.push_back(person('s', "steve"));
     myvector.push_back(person('c', "candice"));

     itr = find (myvector.begin(), myvector.end(), person('s', ""));

     if (itr != myvector.end())
        cout << "First Name: " << itr->getName() << '\n';
     else
        cout << "NOT Found" << '\n';
  }

2 个答案:

答案 0 :(得分:1)

operator==的声明和定义不匹配。如果你想让它成为一个非成员函数,只需删除类定义中的声明,它就使它成为一个成员函数。

bool operator==(const person& r);

如果要使其成为成员函数,则应在类定义之外将其定义为:

bool person::operator==(const person& r)
{
   ...
}

答案 1 :(得分:0)

您需要在类之外定义比较器,而不是作为成员函数

class Person
{
  public:
    friend bool operator==(const person &a, const person &b);
}

bool operator==(const person& r, const person& x)
{
     return x.firstInitial == r.firstInitial;
}

这应该有效,你的程序为我回复了“史蒂夫”。