c++ - 类对象集

标签 c++ class constructor set initializer-list

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

关于c++ - 类对象集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60577136/

相关文章:

c++ - 如何在 WAF 中构建静态库?

c++ - 编写灵活软件的指南?

c++ - Visual Studio 2017 在使用 Poco Xml 文档时检测内存泄漏

C++ 析构函数约定

python - 我可以使用该类的对象访问类变量吗

java - Record 无法从构造函数中获取参数名称?

javascript - instanceof 检查在不设置构造函数的情况下对子类起作用

ios - 子类的 UIView 标准协议(protocol)

delphi - Delphi 中将对象强制转换为父类

c++ - 构造函数在错误的时间调用