2016-06-14 2 views
-2

У меня есть базовый класс животных и производных классов под названием Cat and Dog. display() и readfile() являются виртуальными функциями в обоих классах.Контейнер указателя базового класса C++, редактировать атрибуты конкретного объекта

В настоящее время отображается только «Kay», как только вызывается readfile(). Как я могу прочитать все строки в файле таким образом, чтобы я мог найти элемент в векторе, а затем отредактировать его, например, если я хочу изменить «Sugar» на «Sopa», запустив функцию с именем changeName () например?

Cat.csv 
Kay 
Sugar 
Jo 


int main() 
{ 
    AnimalCollection coll; 

    std::ifstream file("Cat.csv"); 

    Cat *cat = new Cat("CAT"); 
    Dog *dog = new Dog("DOG"); 

    coll.push_back(cat); 
    coll.push_back(dog); 

    for (Animal *c : coll) 
    { 
    c->display(); 
    } 

    for (Animal *c : coll) 
    { 
    c->readfile(file); 
    } 

    return 0; 
} 
+0

Пожалуйста, предоставьте [mcve]. – Barry

+0

Загрузите содержимое файла в соответствующий контейнер (т. Е. 'Std :: map') и извлеките информацию из контейнера, когда это необходимо. –

+0

То, что вы описываете, не соответствует коду, который вы опубликовали, однако то, что является согласованным между двумя, заключается в том, что вы просите одного животного прочитать файл и ожидать нескольких результатов. –

ответ

0

Этот вопрос не содержит важной части.

Как @KennyOstrom указал, что файл, кажется, читается только один раз. A file.seekg(0, file.beg); может помочь.

Это решение ваших проблем?

for (Animal *c : coll) 
{ 
    c->readfile(file); 
    file.seekg(0, file.beg); 
} 

В этом случае лучшим решением было бы прочитать файл один раз и предоставить контент другому классу.

Смежные вопросы