在c++中正确的对象强制转换,值字段不会改变

Proper casting of the object in C++, value field is not changing

本文关键字:转换 字段 改变 c++ 对象      更新时间:2023-10-16

我有一个类:

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> '

编辑:

Node* paraNode = static_cast*>(Node);Para = paraNode->key;帕拉。WRT = para。WRT + 1;

,

错误4错误C2440: 'static_cast':无法从'Node *'转换为'Node *'

有点奇怪,因为key的类型应该是Para。如果你把一切都说出来会怎么样?

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

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

如果有的话Para para = paraNode->key;

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

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