错误:没有匹配的函数用于调用

时间:2011-07-12 16:03:51

标签: c++

我的代码中出现了“无法调用错误的匹配函数”。代码在另一个类的构造函数中创建一个类的实例。

代码如下:

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 = ....

的行

我知道这样的错误通常意味着某个地方的数据类型错误,但我无法弄清楚它在哪里?

2 个答案:

答案 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所以你一定在其他地方犯了错误!