2013-09-18 4 views
-3

У меня возникли проблемы с выяснением того, как я могу хранить новый объект в векторе и уметь извлекать эту информацию.Как я могу сохранить новый объект в векторе?

Что я пытаюсь сделать, это хранить различные данные из файлов в серии объектов, а затем проходить через эти объекты и вынимать информацию.

Я ищу что-то вроде этого:

vector<myClass> list; 
while(i < nFiles) 
{ 
    myClass *temp = new myClass; 
    list.push_back(temp);  

    temp->setSomething(); 

    i++; 
} 

Я хочу иметь другой объект для каждого цикла nFile, поэтому я могу позже пройти через каждый объект и вытащить информацию из каждого объекта.

Я пробовал подталкивать темп к вектору, но он не дал мне ничего, кроме ошибок.

Является ли то, что я пытаюсь сделать программно правильно? Я не могу обдумать это. Любая помощь будет высоко оценена. Спасибо.

+4

Если вы действительно читали ошибки * и обязательную книгу на C++, у вас наверняка есть *, вы бы знали, что случилось. – Griwes

ответ

0

Ваш вектор должен быть либо вектором указателей на myClass, т.е.

vector<myClass *> list; 

или ваши temp не должен быть указателем, то есть

myClass temp; 

Последний означает, что весь объект temp копируется, когда вы делаете list.push_back (байт по байт).

+1

Только при использовании указателей эта часть изменяет объект в векторе: temp-> setSomething() ;. Но вам нужно управлять ручным управлением памятью. Рассмотрите возможность использования интеллектуальных указателей. – Sebastian

+0

Вы 1) не удалось выполнить синтаксис указателя и 2) никогда не хотите хранить необработанный указатель в любом контейнере. – Griwes

+0

И вы также потерпели неудачу в части «byte by byte». – Griwes

5

Сначала немного словарного запаса: вы не хотите хранить классы в массиве (на самом деле, вектор), вы хотите хранить объекты. Объектами являются экземпляры классов.

Во-вторых, у вас есть синтаксис цикла while. Посмотрите его в книге на C++. Лучше использовать цикл for.

В-третьих, всегда пишите MyClass таким же образом. Не меняйте нижний/верхний регистр.

И, наконец, узнайте о различии между указателем на объекты и объекты. Тип элемента, который вы указываете при объявлении вектора, не соответствует тому, что вы вложили в него.

+0

Извините, я должен был потратить время на доказательство, прочитав мой вопрос. Я не такой бессловесный, как я только что озвучил, просто не поспал. Спасибо, что нашли время, чтобы помочь! – nub

+0

@ Ey0o: После того, как [Бальмер-пик] (http://xkcd.com/323/) приходит безумие (лишение сна имеет схожие эффекты, как потребление алкоголя). Попал спать! – bitmask

1

Синтаксис while (...) not (while ...) И вы не можете сказать i = 1 в параметрах while. То, что вы хотите сделать, это:

либо:

int i = 1; 
while (i < nFiles){ 
    //Do something 
} 

ИЛИ

for (int i = 1; i < nFiles; i++){ 
    //Do something 
} 
Смежные вопросы