那位高手能告诉我为什么会出现这样的编译错误?

error: invalid conversion from 'const CAlarmClock*' to 'std::set::key_type {aka CAlarmClock* const}' [-fpermissive]

该回答引用NewBing,仅供参考,不保证完全正确

你好,这是必应。我可以尝试帮你解决编译错误。😊


根据我搜索的结果,你的编译错误是由于你试图将一个 const CAlarmClock* 类型的指针转换为一个 std::set::key_type {aka CAlarmClock* const} 类型的指针。这两种类型是不兼容的,因为 const CAlarmClock* 表示指向一个不可修改的 CAlarmClock 对象的指针,而 CAlarmClock* const 表示一个不可修改的指向 CAlarmClock 对象的指针。也就是说,前者不能改变指针所指向的对象的内容,后者不能改变指针本身的值。


要解决这个错误,你有以下几种可能的方法:

  • 如果你不需要修改指针所指向的对象的内容,你可以将你的指针声明为 const CAlarmClock* const 类型,这样就可以和 std::set::key_type 兼容。
  • 如果你需要修改指针所指向的对象的内容,你可以将你的指针声明为 CAlarmClock* 类型,但是你需要确保你传递给 std::set 的对象也是非常量的,否则会违反常量正确性。
  • 如果你不想使用指针作为 std::set 的键类型,你可以使用 CAlarmClock 类型或者其他可以从 CAlarmClock* 转换的类型,但是你需要确保你为这个类型定义了比较运算符,否则会导致编译错误或者运行时错误。

这里有一些有用的资源,可以帮助你更深入地了解 C++ 中的类型转换和常量正确性:

希望这些信息能对你有所帮助!如果你还有其他问题,请随时问我。😊


源: 与必应的对话, 2023/6/29
(1) c++ - invalid conversion from ‘const type’ to ... - Stack Overflow. https://stackoverflow.com/questions/33261204/invalid-conversion-from-const-type-to-type.
(2) Invalid conversion from ‘const int
’ to ‘int’ while taking std::set .... https://stackoverflow.com/questions/7803013/invalid-conversion-from-const-int-to-int-while-taking-stdset-element-add.
(3) c++ - 'Invalid conversion from some_type
* to const some_type .... https://stackoverflow.com/questions/2673495/invalid-conversion-from-some-type-to-const-some-type.
(4) c++ - error: invalid user defined conversion from char to const key .... https://stackoverflow.com/questions/46534587/error-invalid-user-defined-conversion-from-char-to-const-key-type.