所以我宣布指针看起来像从读取的文件中获取段错误到对象指针数组?
Items* _items[ARRSIZE];
基本上用它们作为对象(一个用于肉,一个用于生产)阵列的目标数组,它是在运行时动态决定。我在构造函数中调用以下函数,并将其标识为我在main函数之前保留段落的原因。
void Inventory::loadRecs(){
datafile.open(_filename);
int i = 0;
char c;
//create fileif it doesnt exist
if(datafile.fail()){
datafile.clear();
datafile.close();
datafile.open(_filename, ios::out);
datafile.close();
}
else{
//read from file
while(!datafile.eof()){
if(_items[i] != nullptr){
delete _items[i];
}
c = datafile.get();
if(c == 'P'){
_items[i] = new Produce;
}
if (c == 'M'){
_items[i] = new Meat;
}
datafile.ignore();
_items[i]->load(datafile);
i++;
datafile.ignore(); //ignore endl
}
_noOfItems = i;
datafile.close();
}
}
我从阅读的文本文件是相当简单的阅读像
P,123,胡萝卜,0.66,[NEWLINE] 第一个字符识别它是什么样的产品(肉或产生),并用加载函数读入该行的其余部分。
我的清单类看起来是这样的:
class Inventory{
char _filename[256];
Item* _items[5];
std::fstream datafile;
int _noOfItems;
}
而构造方法仅初始化一切,并呼吁loadsRecs(这是我从我段错误)
'Item :: load()'是怎么样的? – timrau
[不要使用datafile.eof(),它可能与你的问题有关。](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-认为是错误的) – dwcanillas
此外,最好使用RAII而不是明确的调用“open”和“close”。 – b4hand