0

我有一堂课:

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*>(node); Para para = paraNode->key; para.wrt = para.wrt + 1;

这给了

错误 4 错误 C2440:“static_cast”:无法从“节点 *”转换为“节点 *”

4

2 回答 2

1

如果你这样做 Para para = paraNode->key;

你会得到一份密钥的副本。然后你增加 wrt。如果您在该行之后执行 printf,您可能会得到预期值。但是,如果您从函数内部调用它,则原始 paraNode 将不会被修改。

您需要存储密钥,然后在函数Para* key之后访问key.wrtkey->wrt++您将获得预期值。我建议您阅读堆栈和堆变量如何工作以及 C++ 中的复制构造函数

于 2013-04-30T05:11:43.947 回答
1

有些东西看起来很奇怪,因为键的类型应该是 Para。如果你把所有的东西都写出来会发生什么?

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

其他建议:如果由于某种原因您确定模板类型,您可以使用static_cast<>(或reinterpret_cast<>),它比dynamic_cast<>真正发现和检查类型层次树的速度更快。

于 2013-04-30T03:37:14.033 回答