有人可以告诉我如何使用C ++将数据添加到我的类列表中 拜托?
#include <string>
class Person
{
private:
std::string Name;
public:
Person();
~Person();
std::string GetName()
{
return Name;
}
std::string SetName(std::string name)
{
name = Name;
return name;
}
};
void main()
{
list<Person> lp = new list<Person>();
Person p = new Person();
p.Name = "Smith";
lp.insert(p);
}
这是我的尝试。有人可以纠正我或给我另一个答案吗?感谢
答案 0 :(得分:1)
如果你有可能使用c ++ 11或更高版本,请考虑使用:
list.emplace_back()
或
list.emplace_front()
处理构造和插入。当然,如果你有一个带有字符串参数的Person构造函数,那就更好了。
Person::Person(std::string& name) { Name = name; }
在这种情况下你可以这样做:
lp.emplace_back("Smith");
答案 1 :(得分:0)
为什么你的SetName
只是无效且需要退货?如果要返回新名称,还应该
Name = name;
return Name;
你换了它。
此外,您不需要任何new
和每个主函数都应该返回int
值(如果没有错误,通常为0)。
固定代码:
#include <string>
#include <list>
class Person
{
private:
std::string Name;
public:
//Person();
//~Person();
std::string GetName()
{
return Name;
}
void SetName(std::string name)
{
Name = name;
}
};
int main()
{
std::list<Person> lp;
Person p;
p.SetName("Smith");
lp.push_back(p);
return 0;
}
您需要包含列表才能使用它们,并且您无法直接指定私有成员。此外,您的声明是错误的 - 为此,我会推荐一些cpp教程并阅读文档。
答案 2 :(得分:0)
list.insert()接受一个迭代器,即你要插入新元素的位置。
您也可以
list.push_back(p);
这会在列表末尾插入“p”。
如果你这样做
list.push_front(p);
插入发生在列表的头部。
答案 3 :(得分:0)
首先,由于您使用c ++进行编码,因此您的主函数应返回int
:
int main()
其次,您在非指针的对象上使用new
关键字,请更正:
// This would perhaps be better:
list<Person*> lp;
Person *p = new Person; // remember to delete p; later
我没有看到您已添加<list>
标头并使用std
。您需要它才能使用列表。或者至少写一下std::list
或using std::list;
您正在尝试分配给私有类成员,要么将其声明为public,要么使用setter函数:
p->Name = "Smith"; // remember for pointers, use the '->' or *(p).Name
emplace_back()可能就是您要使用的内容(自c ++ 11开始):
lp.emplace_back(p);
// otherwise, specify an iterator as first argument for insert:
// lp.insert(lp.end(), p);