我一直在託管代碼編程大部分時間,我有興趣回到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