一组 Class 个对象

Set of Class Objects

我定义了一组 class 对象,class 是人。以下是代码 -

#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 &'

我只是想遍历集合的所有元素(class 对象)并打印它们的值,但我不知道为什么会出现此错误。我在网上搜索过,但一无所获。我认为错误可能出在我正在编写的比较函数中,但我今天才学到这一切,现在我被卡住了。有人可以指导我吗?

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

那就是你需要用大括号代替圆括号。

当有圆括号而不是大括号时,例如这个表达式

( 18,"John" )

是带逗号运算符的表达式。它的值是第二个操作数的值,即"John"。所以编译器正在考虑像

这样的声明
set<Person> Set = { "John", "Sean" };

并且您需要包含 header <string>.