C++调用BookList.insert报错cannot use dot operator on a type如何解决
问题原因及修复方案
1 直接报错的核心原因
你遇到的cannot use dot operator on a type报错,核心原因是混淆了类类型名和类实例对象:
- 你写的
BookList是类的类型名,属于类型标识符,不能用点运算符调用成员方法 - 当前运算符重载的形参
book_list才是要插入数据的实际实例,将BookList.insert(book, Position::BOTTOM)修改为book_list.insert(book, Position::BOTTOM)即可解决该语法报错。
2 其他隐藏的逻辑问题
当前代码还有两处需要修复的逻辑漏洞:
- 调用
insert方法时用到的book变量没有定义,也没有对应的从流中读取图书数据的逻辑 - 现有for循环仅执行了跳过分隔符的操作,读取图书、插入列表的逻辑没有放在循环内,无法实现读取count本图书的需求
3 修复后的参考代码
std::istream& operator>>(std::istream& stream, BookList& book_list) { if (!book_list.containers_are_consistent()) { throw BookList::InvalidInternalStateException( "Container consistency error in operator>>"); } size_t count; stream >> count; stream.ignore(100, ':'); // 跳过count后的冒号分隔符 for (size_t i = 0; i < count; i++) { Book book; // 定义单本图书实例 stream >> book; // 需提前实现Book类的输入运算符重载,完成单本图书数据的读取 if (stream) { // 流状态正常时才执行插入 book_list.insert(book, Position::BOTTOM); } stream.ignore(100, ':'); // 跳过每本图书后的冒号分隔符 } return stream; }
内容的提问来源于stack exchange,提问作者superionkey2
相关产品推荐
相关产品推荐

