【问题标题】:C++ Insert into List of ObjectsC++ 插入对象列表
【发布时间】:2015-07-13 06:30:45
【问题描述】:

谁能告诉我如何使用 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);
}

这是我的尝试。有人可以纠正我或给我另一个答案吗?谢谢

【问题讨论】:

  • 此代码不需要您的动态分配。丢失 both new 调用。 (而main 返回,int,顺便说一句)。
  • 所以就像这样:list lp;人 p; ???????
  • 是的,尽管您还需要#include &lt;list&gt; 来完成所有这些操作。老实说,您可能需要的不仅仅是 Stack Overflow 所能提供的。这不是真的语言教程网站。我建议你仔细阅读The Definitive C++ Book Guide and List
  • @FalconUA:你可以在这篇文章中解决更多问题......

标签: c++ list class visual-c++ insert


【解决方案1】:

如果您使用 c++11 或更高版本,请考虑使用:

list.emplace_back() 

list.emplace_front()

处理构造和插入。当然,如果你有一个接受字符串参数的 Person 构造函数,那就更好了。

Person::Person(std::string& name) { Name = name; }

在这种情况下你可以这样做:

lp.emplace_back("Smith");

【讨论】:

    【解决方案2】:

    list.insert() 采用迭代器,即您要插入新元素的位置。

    你也可以这样做

    list.push_back(p);
    

    这会在列表末尾插入“p”。

    如果你这样做

    list.push_front(p);
    

    插入发生在列表的头部。

    【讨论】:

      【解决方案3】:
      • 首先,由于您使用 c++ 进行编码,因此您的 main 函数应该返回一个 int

        int main()
        
      • 其次,您在不是指针的对象上使用了new 关键字,请更正:

        // This would perhaps be better:
        list<Person*> lp;
        Person *p = new Person; // remember to delete p; later
        
      • 我没有看到您包含 &lt;list&gt; 标头并使用 std。您需要它才能使用列表。或者至少写std::listusing std::list;

      • 您正在尝试分配给私有类成员,要么将其声明为公共,要么使用 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);
        

      【讨论】:

        【解决方案4】:

        为什么你的SetName 不是只有void 并且需要返回一些东西?如果你想返回新的名字,你也应该有

        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 教程并阅读文档。

        【讨论】:

        • 感谢您的帮助!但问题仍然存在。我不知道如何使用 c++ 将数据添加到类列表中
        猜你喜欢
        • 2013-02-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 2016-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多