Reputation: 21
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 = ....
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?
Upvotes: 2
Views: 27785
Reputation: 385144
new Discriminator(i, this)
does not match any constructors.
Edit
Well, inlining doesn't affect default arguments so you must have made a mistake somewhere else!
Upvotes: 1
Reputation: 15175
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)
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.
Upvotes: 6