将非常量成员函数传递给常量对象时出错
在提供的代码中,使用 std::set 来存储 StudentT对象。当尝试对集合内的对象调用 getId() 和 getName() 成员函数时,会出现此问题。这些成员函数没有标记为 const,这意味着它们可以修改对象的数据。但是,std::set 中的对象存储为 const StudentT,从而防止任何修改。
编译器检测到这种不一致并生成以下错误消息:
../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
此错误表示编译器正在尝试将 const 对象作为 this 参数传递给非 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(); }
以上是为什么非常量成员函数在 `std::set` 中与 Const 对象一起使用时会导致错误?的详细内容。更多信息请关注PHP中文网其他相关文章!