我必須編寫一個能夠存儲大學項目電影的程序。直到他們決定寫我自己的迭代器來打印出存儲電影的異種集合(有3種不同的電影類)之前,這一切都很好。我完全不知道問題可能是什麼。C++自寫的迭代器 - 從位置0x00000000讀取違規讀取異常
這是我對heterogen集合類:
Class Katalogus {
Film* F[100];
int meret;
public:
Katalogus() :meret(0) {}
void add(Film* mit) {
F[meret++] = mit;
}
void torol(int mit);
void keres_int(int mit);
void keres_str(string mit);
void kiir(ostream& os); //This is the print method
Film* beolvas(istream& is, string& line);
~Katalogus();
class iterator;
iterator begin() {
return iterator(*this);
}
iterator end() {
return iterator(*this, 100);
}
class iterator {
Film *p, *pe;
public:
iterator():p(0),pe(0){}
iterator(Katalogus& a, int ix=0):p(*(a.F+ix)),pe(*(a.F+100)){}
iterator& operator++() {
if (p != pe)++p;
return *this;
}
bool operator!=(const iterator &i) {
return (p != i.p);
}
Film& operator*() {
if (p != pe) return *p;
else throw out_of_range("Hibas indirekcio");
}
};
};
基爾()函數:
void Katalogus::kiir(ostream& os) {
for (int i = 0; i < meret; ++i) {
os << i + 1 << ". "; //just a number in every row
F[i]->Print(os); //calling the print function of my stored movies
os << endl;
}
在我的main()我試着用短代碼來測試它:
Katalogus *DB = new Katalogus;
ifstream DataBase_in;
DataBase_in.open("Katalogus.txt");
string line;
while (getline(DataBase_in,line)){ //reading from file and adding it to the collection
DB->add(DB->beolvas(DataBase_in, line)); //beolvas and add are both working functions
}
DataBase_in.close();
for (Katalogus::iterator it = DB->begin(); it != DB->end(); ++it) {
(*it).Print(cout); //and this is where i get the exception
}
我的原始kiir()函數工作正常,但我必須用它使用我的迭代器來替換它。如果有人能夠幫助我,我會真的appriciate它! :)
你知道哪一行代碼特別拋出異常嗎? – 7Nate9
在調用'Print'之前確保'* it'不是'nullptr'。 –
從異常的文本看來,問題在於您正在取消引用空指針。 – Justin