2013-04-30 68 views
0

我有一個類:在C++對象的正確鑄造,值字段沒有改變

class Para{ 
public: 
    int wrt, liczbaWystapien; 
    Para(){} 
    Para(int wrt, int liczbaWystapien){ 
     this->wrt = wrt; 
     this->liczbaWystapien = liczbaWystapien; 
    } 

然後是其他模板類,我不知道怎麼投對象Para,監守第一種方式根本不影響字段值。

  else if (is_same<T, Para>::value){ 
     //dynamic_cast<Node<Para>*>(node)->key.wrt++;//this way no error occured but value of field **wrt** stays the same 
     node->key.wrt++;//error below 

Error 4 error C2039: 'wrt' : is not a member of 'std::basic_string<_Elem,_Traits,_Ax>'

編輯:

節點* paraNode =的static_cast *>(節點); Para para = paraNode-> key; para.wrt = para.wrt + 1;

這讓

錯誤 4錯誤C2440:'的static_cast:不能從轉換「節點*」到「節點*」

回答

1

東西似乎不可思議,因爲鍵的類型應該是段。如果你把所有東西拼出來會發生什麼?

Node<Para>* paraNode = dynamic_cast<Node<Para>*>(node); 
Para para = paraNode->key; 
key.wrt = key.wrt + 1; 

其他建議:如果前面某種原因,你知道有關模板類型,你可以使用static_cast<>(或reinterpret_cast<>),它比dynamic_cast<>更快,這確實發現和檢查類型層次樹。

+0

感謝changin靜態轉換後我得到錯誤,請看看編輯。 – Yoda 2013-04-30 03:48:57

1

如果你 Para para = paraNode->key;

你拿到鑰匙的副本。然後你增加wrt。如果您在該行之後執行printf,您可能會獲得預期的值。但是,如果您從函數內部調用此函數,那麼原始的paraNode將不會被修改。

您需要存儲密鑰爲Para* key然後訪問key.wrtkey->wrt++然後在函數後,您將獲得預期的值。我建議你閱讀如何堆棧和堆變量的工作,以及如何複製構造函數在c + +