2011-07-12 234 views
1

我得到了「我的代碼中沒有匹配函數調用錯誤」。代碼是在另一個類的構造函數中創建一個類的實例。錯誤:沒有匹配函數調用

的代碼如下:

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

我知道,這樣的錯誤通常意味着我已經有了一個錯誤的數據類型的某個地方的路線,但我想不出它可能在哪裏?

+1

'DiscriminatorContainerPtr'的定義是什麼?你傳遞一個原始指針('this')作爲期望其中之一的構造函數參數。 –

+0

DiscriminatorContainerPtr被定義爲指向DiscriminatorContainer類的指針。它在另一個頭文件中定義... – Mary

回答

1

new Discriminator(i, this)與任何構造函數都不匹配。


編輯

好,inlining doesn't affect default arguments所以你一定弄錯了別的地方!

+0

對,好吧,但它爲什麼不匹配任何構造函數?第三個參數是默認的,就我所知,我已經用ushort和一個指針匹配了前兩個參數。 – Mary

+1

@Mary - 我們在代碼中看不到任何默認值。編譯器能看到它嗎? –

+0

我想知道'inline'關鍵字是否有一部分可以在這裏播放。 –

6

「更仔細地閱讀錯誤信息」的典型案例。

它告訴你,你正在試圖調用函數與簽名Minerva::Discriminator::Discriminator(ushort&, Minerva::DiscriminatorContainer* const)

,但只存在其他兩個構造

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

所以只是檢查調用構造函數。你可能會忘記一個論點。

相關問題