我的代码中出现了“无法调用错误的匹配函数”。代码在另一个类的构造函数中创建一个类的实例。
代码如下:
inline DiscriminatorContainer::DiscriminatorContainer(ushort id, FebPtr feb):
m_id(id), m_feb(feb), m_discriminators(new Discriminators()) {
//make discriminators
for (ushort i = 0; i <kNDiscriminators; ++i){
DiscriminatorPtr dsc = DiscriminatorPtr(new Discriminator(i, this));
m_discriminators->push_back(dsc);
}
}
inline Discriminator::Discriminator(ushort id, DiscriminatorContainerPtr dc, double threshold) :
m_id(id), m_threshold(threshold),
m_nhits(0), m_dc(dc)
{
init();
}
这些构造函数实际上位于两个不同的头文件中,但为了完整性,我将两者都包括在内。
我收到错误
../src/DiscriminatorContainer.h:50: error: no matching function for call to `Minerva::Discriminator::Discriminator(ushort&, Minerva::DiscriminatorContainer* const)'
../src/Discriminator.h:24: note: candidates are: Minerva::Discriminator::Discriminator(const Minerva::Discriminator&)
../src/Discriminator.h:61: note: Minerva::Discriminator::Discriminator(ushort, Minerva::DiscriminatorContainerPtr, double)
关于DiscriminatorPtr dsc = ....
我知道这样的错误通常意味着某个地方的数据类型错误,但我无法弄清楚它在哪里?
答案 0 :(得分:6)
“更仔细地阅读错误信息”的典型案例。
它告诉您,您正尝试使用签名Minerva::Discriminator::Discriminator(ushort&, Minerva::DiscriminatorContainer* const)
但只存在另外两个构造函数
Minerva::Discriminator::Discriminator(const Minerva::Discriminator&)
Minerva::Discriminator::Discriminator(ushort, Minerva::DiscriminatorContainerPtr, double)
所以只需检查对构造函数的调用。你可能忘了一个论点。
答案 1 :(得分:1)
new Discriminator(i, this)
与任何构造函数都不匹配。
修改
好吧,inlining doesn't affect default arguments所以你一定在其他地方犯了错误!