创建对象数组会导致出现问题

时间:2016-04-23 11:47:15

标签: c++ multithreading vector

我创建了以下两个对象:

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];

因为我的两个函数addProcessaddThread都分别指向ProcessThread,但编译器要求引用t[i] addThread我不明白为什么。

void    Process::addThread(Thread *t)
{
  this->threads_.push_back(t);
}

void    Reception::addProcess(Process *p)
{
  this->createdPro.push_back(p);
}

createdProReception类中定义如下:

 std::vector<Process *>        createdPro;
{p}和threads_类中的Process就像这样:

 std::vector<Thread *>         threads_;

错误信息(尽管很明显)如下:

  

错误:没有匹配函数来调用'Process :: addThread(Thread&amp;)'        亲&GT; addThread(T [1]);

     

process.hpp:29:10:note:candidate:void Process :: addThread(Thread *)      void addThread(Thread *);

     

process.hpp:29:10:注意:参数1从'Thread'到'Thread *'没有已知的转换

即使我将Thread定义为指针。

1 个答案:

答案 0 :(得分:0)

您已定义成员函数以获取指针:

void Process::addThread(Thread *t)
{
    ...
}

然后,您为&t[i]调用此函数,这是一个指针,应该可以正常工作:

      pro->addThread(&t[i]); // Adds the new thread to a vector

您也可以使用t+i调用它,它仍然可以。但是,您的错误消息告诉我们一些不同的东西:编译器找不到pro->addThread(t[i]);的匹配项(即缺少&)。

你要么在你的问题中输了一个拼写错误,要么在你的代码中写了一个拼写错误。或者你在忘记&符号的地方有另一个调用:t[i]当然会指定一个对象(它相当于*(t+i))而不是指针,并导致你有错误信息({{ 3}})