【问题标题】:Function operator= must be a member function函数 operator= 必须是成员函数
【发布时间】:2013-07-06 21:23:38
【问题描述】:

我在公共类访问说明符中有一个函数原型。 这是原型:

friend void operator=(String &s,char *str);

String 是其原型所在的类。如您所见,它是一个朋友功能。通过保持这种方式,它会给我这个错误:

operator =' must be a non-static member // Error: operator= must be a member function

当我删除朋友属性时,它给了我这个错误:

error C2804: binary 'operator =' has too many parameters

这个原型有什么问题? operator= 函数目前没有调用,所以即使没有函数定义也不应该有任何错误。

【问题讨论】:

  • String& operator=(char *str);
  • 虽然这解决了错误,但你为什么会有 operator=() return void??
  • @dans3itz:我的大脑被切换到“懒惰模式”:) 你说得对,我编辑了评论
  • 更好的是,如果你有一个 const char * 的隐式转换构造函数(使用 char * 对调用者来说确实是出乎意料的),String &operator=(String s) 并复制交换它。

标签: c++ class operator-overloading friend non-static


【解决方案1】:

如果它是 String 类的一部分,那么它就是对 this 的赋值,所以它只需要一个参数。

【讨论】:

  • 这是我的 String 类的一部分。我正在尝试做一个我的版本。我试过按照你的方式做,但它给了我一个内存分配错误,所以我放弃了这个想法。
  • @RobertEagle:当你有错误时,你应该修复它们。
  • @RobertEagle:你可能搞砸了char 指针。通过“抛弃想法”,您所做的一切都掩盖了潜在的错误,同时将自己限制在无法编译的 incorrectillegal 方法中。
  • @RobertEagle 我会敦促您找出导致“内存分配错误”的原因并修复它。内存管理是学习如何编写 C++ 的重要组成部分,尽早掌握它是值得的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多