编译存在问题

编译时报 prototype for 'Function(std::__cxx11::string)' does not match any in class '' Function(const std::string)

  1. 原因分析
    std::__cxx11::stringstd::string 不匹配。
    hpp文件里面使用的是#include <string.h> ,后面改成#include <string>就好了。
    c++中,stringstring.h 的文件不一样,大概是string.hstring类型跟std::__cxx11::string类型不一样。

  2. 解决方法
    <string.h> 改成 <string> 就好了。

  3. 其他问题
    函数声明和定义要对应好,注意使用const&

自定义sort的比较方法,编译时报 error: invalid use of non-static member function 'bool MyClass::cmp()'

  1. 原因分析
    不正确使用非静态成员函数。
    类中的成员函数如果没有声明static,那么默认会在函数声明的变量中加入类对象的指针this
    即如果声明的是bool MyClass::cmp(const int &, const int &),其结果实际上是bool MyClass::cmp(MyClass *this, const int &, const int &)
  • 其中一种解释是说,函数的参数不匹配,
    sort中的函数需要2个变量,而声明在类中的函数实际上有3个。

  • 另一种说法是,当cmp为非静态函数时,在进行sort的编译时,编译器无法传递this指针,因此无法理解是调用了哪个对象的cmp函数,因此提示错误使用非静态函数。

静态函数与非静态函数的区别

  • 静态函数属于类本身,在类加载时就会分配内存,由所有类的对象共享,可以通过Class::Function直接访问,函数内不会传递对象this指针。
  • 非静态函数只有在实例对象创建时才会分配内存,可以通过对象进行调用。
  • 静态函数的参数类型可以是该类,而普通成员函数不行。同时,静态函数中不应出现类的非静态成员,除非参数中存在该类。
  1. 解决方法
    在hpp文件上相关函数加上static,同时更改函数中引用的函数为static
  2. 参考文档:
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容