C ++ выделяет массив объектов - PullRequest
0 голосов
/ 13 апреля 2011

У меня проблема с выделением массива некоторых объектов, которые мне нужно инициализировать с помощью конструктора.Позвольте мне показать, что я имею в виду:

ofstream* out = new ofstream[10];

for(int i = 0; i < 10; i++){
    stringstream ss;
    ss << "file" << i << ".txt";
    string str(ss.str());
    char *fileName = (char*)str.c_str();
    out[i] = ofstream(fileName); //Now, this is wrong
}

И мне нужна помощь по отмеченной линии wrong.Как мне выделить каждого члена этого массива?

И спасибо, что не указали мне на другие сообщения (я много смотрел перед публикацией)

Ответы [ 4 ]

5 голосов
/ 13 апреля 2011

Вот самое простое решение вашей проблемы.

out[i].open(fileName); 
5 голосов
/ 13 апреля 2011

Избавьтесь от переменной fileName и используйте out[i].open(str.c_str()); - и не забудьте delete[] out;

2 голосов
/ 13 апреля 2011

Если вам действительно нужно вызвать конструктор к моменту вставки элемента (возможно, из-за того, что у вашего класса нет конструктора по умолчанию), попробуйте разместить новый, как описано здесь http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.5

2 голосов
/ 13 апреля 2011

Вы можете оптимизировать это, удалив str и fileName:
out[ i ].open( ss.str().c_str() );

Кроме того, я бы рекомендовал вам использовать std::vector, чтобы не выполнять выделение и освобождение памяти.
std::vector< std::ofstream >

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...