在c++中正确的对象强制转换,值字段不会改变
Proper casting of the object in C++, value field is not changing
我有一个类:
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++中的复制构造函数
相关文章:
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 将具有不同字段的结构转换为 uint8 的数组
- 如何在逗号分开列表中解析字段并将其转换为整数
- C++ Arduino:向下转换后,子字段不引用原始地址
- 将指向结构的指针转换为具有较少字段数的另一种结构类型
- 将字符串转换为 XML 并使用提升更新值字段
- 将对象的第一个字段强制转换为对象的类型是否真的安全?
- 使用out类型转换,我如何填充位字段
- 通过C强制转换访问结构的第一个字段是否违反了严格的别名
- 将SQLite日期字段转换为C++Time_T
- 通过转换基类指针来设置派生类字段
- 通过强制转换第一个字段来安全访问父类
- 在c++中正确的对象强制转换,值字段不会改变
- 无论如何,在c++ /Qt中转换字符串到结构中的字段