我一直在托管代码编程大部分时间,我有兴趣回到C++。 一直敲着我的头(谷歌)找到答案。 所以我开始在这里练习:http://www.cplusplus.com/forum/articles/12974/ 并且偶然发现了很多错误。 我试过可乐机(第二个),它给了我做一个可乐机的想法,只是想在一个机初始化列表与指针饮料的。C++列表遍历和初始化
我不想使用Boost库,因为我想了解容器如何工作(尤其是列表)。
我将张贴问题后我的代码:
1)我收到以下错误的方法行(*it)->getDrinkName()
EXC_BAD_ACCESS:getDrinkName()
在Drink.cpp这是为什么?我没有正确初始化饮料清单吗?
当我试试这个:
Drink* test = new Drink("Coke");
cout << test->getDrinkName();
它的工作原理。它在Drink中是我的构造函数吗?
2)我是否想在Machine的构造函数中初始化列表?像:
_list = new list<Drink *>();
3) 下面是代码:
Drink.h
#include <iostream>
#include <string>
using namespace std;
class Drink
{
public:
Drink(string name);
string getDrinkName();
private:
string _name;
};
Drink.cpp:
#include "Drink.h"
Drink::Drink(string name)
{
_name = name;
}
string Drink::getDrinkName()
{
return _name;
}
Machine.h
#include <iostream>
#include <list>
#include "Drink.h"
using namespace std;
class Machine
{
public:
Machine();
list<Drink*> getList() const;
private:
list<Drink*> _list;
};
Machine.cpp:
#include "Machine.h"
Machine::Machine()
{
}
list<Drink*> Machine::getList() const
{
return _list;
}
的main.cpp
#include <iostream>
#include <string>
#include "Machine.h"
using namespace std;
int main() {
Machine* machine = new Machine();
Drink* testCoke = new Drink("Coke");
machine->getList().push_back(testCoke);
std::list<Drink*>::const_iterator it ;
for(it = machine->getList().begin();it!=machine->getList().end();it++)
{
cout << (*it)->getDrinkName();
delete *it;
}
return 0;
}
Thanx提前!
哎呀我忘了删除,在这里我加了!感谢名单。 我知道我可以拿出像他们使用像列表所有教程的所有动态分配...但我希望把指针在列表中,然后最终使用升压,但现在我想知道为什么它<在使S崩溃地点。 –
bachibusuc
@juanchopanza虽然我同意他应该避免动态分配,但这不是问题的根源,这是一个迭代器范围的问题。 – IdeaHat
@bachibusuc添加'delete'只是使代码变得更糟。真的退后一步,从一本好的C++书开始。 – pmr