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