成员函数调用中函数限定不一致
在提供的代码中,访问成员函数 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中文网其他相关文章!