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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6667342/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-28 20:29:50  来源:igfitidea点击:

error: no matching function for call to

c++

提问by Mary

I am getting the "no matching function for call to error" in my code. The code is creating instances of one class in the constructor of another class.

我在我的代码中收到“没有匹配的函数调用错误”。该代码正在另一个类的构造函数中创建一个类的实例。

The code is as follows:

代码如下:

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();
  }

These constructors are actually in two different header files, but I included both for completeness.

这些构造函数实际上位于两个不同的头文件中,但为了完整起见,我都包含了它们。

I get the error

我收到错误

../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)

about the line that goes DiscriminatorPtr dsc = ....

关于那条线 DiscriminatorPtr dsc = ....

I know that such an error usually means I've got a wrong data type somewhere, but I can't figure out where it could be?

我知道这样的错误通常意味着我在某处输入了错误的数据类型,但我无法弄清楚它可能在哪里?

回答by RedX

Typical case of "read the error message more carefully".

“更仔细地阅读错误信息”的典型案例。

It's telling you that you are trying to call the function with the signature Minerva::Discriminator::Discriminator(ushort&, Minerva::DiscriminatorContainer* const)

它告诉你你正试图调用带有签名的函数 Minerva::Discriminator::Discriminator(ushort&, Minerva::DiscriminatorContainer* const)

but there only exists two other constructors

但只有两个其他构造函数

Minerva::Discriminator::Discriminator(const Minerva::Discriminator&)
Minerva::Discriminator::Discriminator(ushort, Minerva::DiscriminatorContainerPtr, double)

So just check the call to the constructor. You probably forget one argument.

所以只需检查对构造函数的调用。你可能忘记了一个论点。

回答by Lightness Races in Orbit

new Discriminator(i, this)does not match any constructors.

new Discriminator(i, this)不匹配任何构造函数。



Edit

编辑

Well, inlining doesn't affect default argumentsso you must have made a mistake somewhere else!

好吧,内联不会影响默认参数,所以你一定是在其他地方犯了错误!