gpt4 book ai didi

c++ - 访问包含列表的对象列表的内容

转载 作者:行者123 更新时间:2023-11-28 02:00:32 25 4
gpt4 key购买 nike

几个星期以来,我一直在努力让它发挥作用。我很尴尬。我觉得答案可能简单得可笑。

我想定义一种包含列表的对象(即类),例如类 ListA{字符串类别;列出<字符串>成分;…}。然后我想创建这些对象的列表,例如list< ListA > myMenu.正如您已经猜到的那样,我无法让它工作。

代码如下:

#include <iostream>
#include <list>

using namespace std;

class ListA {
public:
string category;
list<string> items;

ListA() { category = "Unentitled"; }
ListA(const ListA& orig){}
~ListA(){}
};

int main(int argc, char** argv) {
cout<<"\n\nTEST a6.3: Let's try an example that is more complete. ";

//setup lists for each entree
ListA ingredientsA;
ingredientsA.category="Pizza";
ingredientsA.items.push_back("tomatos"); ingredientsA.items.push_back("garlic");
ingredientsA.items.push_back("cheese"); ingredientsA.items.push_back("dough");
ListA ingredientsB;
ingredientsB.category="Milk shake";
ingredientsB.items.push_back("milk"); ingredientsB.items.push_back("ice cream");
ingredientsB.items.push_back("cocoa"); ingredientsB.items.push_back("whip cream");

//verify contents of lists are correctly added
cout<<"\nTEST a.6.3.2[Category("<<ingredientsB.category<<")]";
cout<<"\nTEST a.6.3.4[Ingredient("<<ingredientsB.items.front()<<")]";

//add to our list of entries
list< ListA > dishes;
dishes.push_back(ingredientsA);
dishes.push_back(ingredientsB);

//grab first entree in dishes list just added, what the heck?
ListA tmpa = dishes.front();
cout<<"\nTEST a.6.3.5[Category("<<tmpa.category<<")]";
cout<<"\nTEST a.6.3.6[Ingred size("<<tmpa.items.size()<<")]\n";

//same with iterator
list< ListA >::iterator itra = dishes.begin();
cout<<"\nTEST a.6.3.5[Category("<<itra->category<<")]";
cout<<"\nTEST a.6.3.6[Ingred size("<<itra->items.size()<<")]\n";

return 0;
}

输出:

TEST a6.3: Let's try an example that is more complete. 
TEST a.6.3.2[Category(Milk shake)]
TEST a.6.3.4[Ingredient(milk)]
TEST a.6.3.5[Category()]
TEST a.6.3.6[Ingred size(0)]

TEST a.6.3.5[Category()]
TEST a.6.3.6[Ingred size(0)]

RUN FINISHED; exit value 0; real time: 10ms; user: 0ms; system: 0ms

我创建了列表 < ListA >,向其中添加了 ListA 对象,然后它们立即尝试访问该列表的元素,但无法访问该死的东西。 (参见 a.6.3.5 & .6;第一个是直接访问,第二个是迭代器。)

建议?我做错了什么绝对愚蠢的事情?

最佳答案

ListA(const ListA& orig){}

你的类有一个显式声明的复制构造函数,它不复制任何东西。

当您声明一个复制构造函数时,您将负责完全基于被复制对象的内容构造新对象。

您的构造函数不执行任何操作。你最终构建了一个空对象。

dishes.push_back(ingredientsA);

因此,您创建了一个列表。然后通过 push_back()ingredientsA 复制到列表的末尾。

由于你的复制构造函数并没有真正复制任何东西,你最终将一个完全空的类实例复制到 dishes 列表中。

只需摆脱显式复制构造函数。它没有明显的目的。

关于c++ - 访问包含列表的对象列表的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39802619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com