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::listusing 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);