Набор объектов класса - PullRequest
1 голос
/ 07 марта 2020

Я определил набор объектов класса, классом является Person. Ниже приведен код -

#include<iostream>
#include<set>
#include<functional>
using namespace std;

class Person {
    public:
        int age;
        string name;
    bool operator < (const Person& rhs) const { return age < rhs.age; }
};
int main()
{
    set<Person> Set = { (18,"John"),(16,"Sean") };
    for (const auto& e: Set)
    {
        cout << e.age << " " << e.name;;
    }
    return 0;
}

При создании кода появляется следующая ошибка:

Error   C2664   'Person::Person(Person &&)': cannot convert argument 1 from '_Ty' to 'const Person &'

Я просто пытаюсь перебрать все элементы (объекты класса) из набора и распечатать их значения, но я понятия не имею, почему эта ошибка появляется. Я искал это онлайн и ничего не получил. Я думаю, что ошибка может быть в функции сравнения, которую я пишу, но я только что узнал все это сегодня и теперь я застрял. Может кто-нибудь, пожалуйста, проведите меня до конца?

1 Ответ

0 голосов
/ 07 марта 2020

Запись

set<Person> Set = { {18,"John"},{16,"Sean"} };

То есть вам нужно использовать скобки вместо скобок.

Если вместо скобок есть скобки, например, это выражение

( 18,"John" )

это выражение с оператором запятой. Его значение - это значение второго операнда, равного "John". Таким образом, компилятор рассматривает объявление как

set<Person> Set = { "John", "Sean" };

И вам нужно включить заголовок <string>.

...