首页 > 后端开发 > C++ > 为什么从 `std::set` 访问成员函数时会出现'将 'const StudentT' 作为 'this' 参数传递”错误?

为什么从 `std::set` 访问成员函数时会出现'将 'const StudentT' 作为 'this' 参数传递”错误?

Susan Sarandon
发布: 2024-12-26 10:55:14
原创
605 人浏览过

Why Do I Get

成员函数调用中函数限定不一致

在提供的代码中,访问成员函数 getId() 和 getName() 时出现错误来自存储在集合中的对象数据结构。这个问题源于对象的常量性和成员函数的限定之间的不匹配。

要理解这一点,我们需要记住集合中的对象存储为常量引用。但是,成员函数 getId 和 getName 没有声明为 const,这意味着它们可以修改对象的状态。

发生错误的行中:

cout << itr->getId() << " " << itr->getName() << endl;
登录后复制

编译器检测到 itr 迭代器指向 const StudentT 对象,根据定义,该对象无法修改。因此,尝试在 const 对象上调用非常量成员函数是不允许的,因此会生成错误消息:

../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'int StudentT::getId()' discards qualifiers
../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'std::string StudentT::getName()' discards qualifiers
登录后复制

要解决此问题,我们必须将成员函数 getId 和 getName 声明为 const,表明它们不会修改对象的状态:

int getId() const {
    return id;
}

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

通过将这些函数设置为 const,我们保证可以在 const 对象上安全地调用它们,从而消除了常量不匹配错误。

此外,运算符

StudentT 类的重载也应声明为 const:
inline bool operator<(const StudentT &s1, const StudentT &s2) {
    return s1.getId() < s2.getId();
}
登录后复制

这可确保比较操作不会尝试修改正在比较的对象,从而保持代码的正确性。

以上是为什么从 `std::set` 访问成员函数时会出现'将 'const StudentT' 作为 'this' 参数传递”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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