C++ 插入对象列表
C++ Insert into List of Objects
谁能告诉我如何使用 C++ 将数据添加到我的 class 列表中
请问?
#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);
}
这是我的尝试。有人可以纠正我或给我另一个答案吗?谢谢
为什么你的 SetName
不只是 void 而需要 return 东西?如果你想要 return 新名称,你还应该
Name = name;
return Name;
您已切换。
此外,您不需要任何 new
和 每个 主函数应该 return 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 教程并阅读文档。
list.insert() 采用迭代器,即您要插入新元素的位置。
你也可以
list.push_back(p);
这会在列表末尾插入 'p'。
如果你这样做
list.push_front(p);
插入发生在列表的头部。
如果您碰巧使用的是 c++11 或更高版本,请考虑使用:
list.emplace_back()
或
list.emplace_front()
处理构造和插入。当然,如果你有一个带字符串参数的 Person 构造函数,那就更好了。
Person::Person(std::string& name) { Name = name; }
在这种情况下你可以这样做:
lp.emplace_back("Smith");
首先,由于您使用 C++ 编写代码,因此您的主函数应该 return 一个 int
:
int main()
其次,您在不是指针的 object 上使用了 new
关键字,请更正:
// This would perhaps be better:
list<Person*> lp;
Person *p = new Person; // remember to delete p; later
我没有看到您包含 <list>
header 并使用了 std
。您需要它才能使用列表。或者至少写 std::list
或 using std::list;
您正在尝试分配给私有 class 成员,要么声明它 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);
谁能告诉我如何使用 C++ 将数据添加到我的 class 列表中 请问?
#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);
}
这是我的尝试。有人可以纠正我或给我另一个答案吗?谢谢
为什么你的 SetName
不只是 void 而需要 return 东西?如果你想要 return 新名称,你还应该
Name = name;
return Name;
您已切换。
此外,您不需要任何 new
和 每个 主函数应该 return 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 教程并阅读文档。
list.insert() 采用迭代器,即您要插入新元素的位置。
你也可以
list.push_back(p);
这会在列表末尾插入 'p'。
如果你这样做
list.push_front(p);
插入发生在列表的头部。
如果您碰巧使用的是 c++11 或更高版本,请考虑使用:
list.emplace_back()
或
list.emplace_front()
处理构造和插入。当然,如果你有一个带字符串参数的 Person 构造函数,那就更好了。
Person::Person(std::string& name) { Name = name; }
在这种情况下你可以这样做:
lp.emplace_back("Smith");
首先,由于您使用 C++ 编写代码,因此您的主函数应该 return 一个
int
:int main()
其次,您在不是指针的 object 上使用了
new
关键字,请更正:// This would perhaps be better: list<Person*> lp; Person *p = new Person; // remember to delete p; later
我没有看到您包含
<list>
header 并使用了std
。您需要它才能使用列表。或者至少写std::list
或using std::list;
您正在尝试分配给私有 class 成员,要么声明它 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);