我定义了一组类对象,该类是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 &'

我只是想遍历集合的所有元素(类对象)并打印它们的值,但是我不知道为什么会出现此错误。我已经在网上搜索了,却一无所获。我认为该错误可能出在我正在编写的compare函数中,但我今天才学到了这一切,现在我陷入了困境。有人可以引导我通过吗?

最佳答案


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

那就是您需要使用花括号而不是括号。

当有括号而不是大括号时,例如此表达式
( 18,"John" )

是带逗号运算符的表达式。它的值是第二个操作数的值"John"。所以编译器正在考虑这样的声明
set<Person> Set = { "John", "Sean" };

并且您需要包括标题<string>

10-08 11:10