создать два следующих объектов:Создание массива объектов вызывает вопрос
bool Reception::createNProcess()
{
for (int y = 0; y < 3; ++y)
{
Process *pro = new Process; // forks() at construction
Thread *t = new Thread[5];
this->addProcess(pro); // Adds the new process to a vector
if (pro->getPid() == 0)
{
for (int i = 0; i < 5; ++i)
{
pro->addThread(&t[i]); // Adds the new thread to a vector
t[i].startThread();
}
}
}
Где я создаю 3 процесса (что я воплощен в Process
) и создать 5 потоков в каждом из этих процессов.
Но я не уверен, что следующая строка верна:
Thread *t = new Thread[5];
Поскольку мои две функции addProcess
и addThread
оба принимают указатель на Process
и Thread
соответственно, и все же компилятор запрашивает ссылку на t[i]
для addThread
, и я не понимаю, почему.
void Process::addThread(Thread *t)
{
this->threads_.push_back(t);
}
void Reception::addProcess(Process *p)
{
this->createdPro.push_back(p);
}
createdPro
определяется в Reception
классе следующим образом:
std::vector<Process *> createdPro;
и threads_
в Process
класса, как, например:
std::vector<Thread *> threads_;
и сообщение об ошибке (так очевидно, как это) является следующим:
error: no matching function for call to ‘Process::addThread(Thread&)’ pro->addThread(t[i]);
process.hpp:29:10: note: candidate: void Process::addThread(Thread*) void addThread(Thread *);
process.hpp:29:10: note: no known conversion for argument 1 from ‘Thread’ to ‘Thread*’
Хотя я определил свой Thread
как указатель.
Можете ли вы показать определение 'threads_' и' createdPro'? – Christophe
Хорошо! Благодарю. Здесь нет никакого рассогласования с объектами. Но кул, вы также показываете точное сообщение об ошибке, пожалуйста? – Christophe
'pro-> addThread (&t[i]);' выглядит правильно для меня на основе того, что вы опубликовали. Что вы подразумеваете под «компилятор запрашивает ссылку на t [i] для addThread»? Вы должны написать точное сообщение об ошибке –