Mary
Mary

Reputation: 21

error: no matching function for call to

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

Answers (2)

Lightness Races in Orbit
Lightness Races in Orbit

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

RedX
RedX

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

Related Questions