2016-02-17 193 views
-1

這是我的課:爲什麼在靜態轉換之後調用構造函數?

class AComponent : public nts::IComponent 
{ 
public: 
    AComponent(const size_t &maxInputs, const size_t &maxOutputs, const size_t &value); 
    AComponent(nts::AComponent &); 
    virtual ~AComponent(); 
    virtual nts::Tristate Compute(size_t pin_num_this = 1); 
    virtual void SetLink(size_t pin_num_this, 
    nts::IComponent &component, 
    size_t pin_num_target); 
    void setComponent(const size_t &components, nts::Tristate &state); 
    virtual void Dump(void) const; 
    nts::Tristate &getComponent(const size_t &pin); 
protected: 
    std::vector <nts::Tristate *> _components; 
    size_t      _maxInputs; 
    size_t      _maxOutputs; 
}; 

,當我嘗試調用該行:

this->_components[pin_num_this] = 
    &static_cast<nts::AComponent>(component).getComponent(pin_num_target); 

我有這種情況發生此編譯錯誤:

sources/AComponant.cpp:33:76: error: no matching function for call to ‘nts::AComponent::AComponent(nts::IComponent&)’ 
    this->_components[pin_num_this] = &static_cast<nts::AComponent>(component).getComponent(pin_num_target); 

如果我執行構造函數,它在這裏。問題是,我不想操縱IComponent,我想操縱AComponent。你知道爲什麼會發生這種情況嗎?

編輯:

this->_components是向量。它在構造函數中聲明是這樣的:

this->_components.reserve(maxInputs + maxOutputs + 2); 
+1

是什麼'component'的類型? –

+0

請告訴我們'component'是如何聲明的。 –

回答

5
  1. 您需要component轉換爲引用類型 - AComponent&(或&componentAComponent*)。你不想複製任何東西。
  2. 您可能需要dynamic_cast從基類降到派生類安全static_cast適用於沒有檢查,向上轉換和向下傾斜...以及here's the list

你應該有什麼:

dynamic_cast<nts::AComponent&>(component).getComponent(pin_num_target); 

瞭解如何使用dynamic_cast。有一個運行時檢查涉及。轉換可能失敗並丟棄std::bad_cast(引用類型)或返回nullptr(指針類型)。

編輯:如果你有一個抽象IComponent,只有一個來自IComponent派生類型,你可以相當肯定會有一個component會引用一個AComponent對象。因此,您可以使用static_cast來做到這一點,但第一點仍然成立。

+1

不一定需要執行'dynamic_cast'。 'static_cast'也能正確向下轉換,它只是不檢查對象的類型和目標類型是否有任何類型的運行時匹配...所以你可以投射你的東西不是。但是,例如,在'static_cast'方面實現'polymorphic_downcast'相當普遍,'dynamic_cast'只在調試運行時纔會發生,以驗證演員陣容。 –

2

1)如果new_type類型的臨時對象可以聲明和初始化 與表達,如通過new_type Temp(expression);其中 可涉及隱式轉換,向 new_type或所述構造函數的調用調用用戶定義的轉換運算符,然後 static_cast<type>(expression)計算並返回該 臨時對象的值。

http://en.cppreference.com/w/cpp/language/static_cast

相關問題