2013-04-30 36 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 + +