我创建了以下两个对象:
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;
{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
定义为指针。
答案 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}})