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
error: no matching function for call to
提问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!
好吧,内联不会影响默认参数,所以你一定是在其他地方犯了错误!