首页 > 后端开发 > C++ > 为什么 `getId()` 和 `getName()` 在 C 中导致'将 'const' 对象作为 'this' 参数传递”错误?

为什么 `getId()` 和 `getName()` 在 C 中导致'将 'const' 对象作为 'this' 参数传递”错误?

DDD
发布: 2024-12-23 20:18:15
原创
802 人浏览过

Why Are `getId()` and `getName()` Causing

错误:将 Const 对象作为“this”参数传递

在给定的 C 代码中,您在尝试访问 getId 时遇到错误() 和 getName() 存储在 a 中的对象的成员函数std::set:

<br>错误:将 'const StudentT' 作为 'int StudentT::getId()' 的 'this' 参数传递会丢弃限定符<br>错误:传递 'const StudentT' 作为 'std::string StudentT::getName()' 的 'this' 参数丢弃限定符<br>
登录后复制

此错误源于 std::set 中的对象存储为 const StudentT 实例。当您对这些 const 对象调用 getId() 和 getName() 函数时,编译器会检测到问题。

在 C 中,不允许非常量成员函数修改 const 对象。 getId() 和 getName() 是非常量函数,可能会修改调用它们的对象。但是,由于集合中的对象是 const,因此任何通过这些成员函数修改它们的尝试都会出错。

解决方案是将 getId() 和 getName() 函数也设置为 const:

int getId() const {
    return id;
}

string getName() const {
    return name;
}
登录后复制

通过将这些函数设置为 const,您表明它们不会修改它们所调用的对象,并且编译器将允许它们在 const 上使用

此外,建议实现运算符

inline bool operator< (const StudentT & s1, const StudentT & s2) {
    return s1.getId() < s2.getId();
}
登录后复制
作为常量引用以匹配其作为比较函数的预期用途:

以上是为什么 `getId()` 和 `getName()` 在 C 中导致'将 'const' 对象作为 'this' 参数传递”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板