【问题标题】:Overloading Operators with char c++用 char c++ 重载运算符
【发布时间】:2015-12-15 14:41:30
【问题描述】:

我正在为有关重载运算符的课程做作业。我遇到的问题是一个字符。

RetailItem &RetailItem::operator=(const RetailItem &objRetail) {    
    this->description = objRetail.getDescription();
    this->unitsOnHand = objRetail.getUnitsOnHand();
    this->price = objRetail.getPrice();
    return *this;
}

我在 Visual Studio 上收到一条消息:

const char * 类型的值不能分配给char * 类型的实体。

我做了一些研究,但没有发现任何东西。如果有人可以提供帮助,请提前致谢。

编辑:

我将添加getDescription 函数以提供更多信息。描述也是*char

const char *RetailItem::getDescription() const{

    return description;
}

【问题讨论】:

  • 请发帖MCVE
  • 你真的需要一个非常量 char* 成员吗?
  • 顺便说一句,代码不需要任何this->s;这隐含在成员函数中。

标签: c++ arrays pointers char operator-overloading


【解决方案1】:

可能 RetailItem::descriptionchar*RetailItem::getDescription 将此 char* 转换为 const char* 并返回。您可以隐式添加 const 限定符,但您不能在赋值中以相同的方式删除它们:

this->description = objRetail.getDescription();

而你可能不应该。这将使两个RetailItems 引用同一个资源,而没有正确管理其生命周期,也不会释放之前持有的内存(如果它确实是指向动态分配数组的指针)。

这归结为:您应该更喜欢使用 std::string 而不是数组。

【讨论】:

  • 但是我不能使用 this-> 和 strcpy_s
  • 同意,你所做的看起来很危险。 objRetail 肯定会返回 const char*,特别是为了阻止你做你想做的事情。回复:strcpy_s:不要使用 strcpy_s。说真的,尽可能停止使用 char*s。您使用的是 C++,而不是 C,通常不必弄乱裸指针,应尽可能避免使用它们。
  • 我不喜欢使用 char,但正如我所说,这是一项功课。教授想要一个字符。
【解决方案2】:

原因可能是您在类中使用的“成员变量”的数据类型与函数的返回值不匹配。

const char *RetailItem::getDescription() const{

    return description;
}

在 function 之前删除 const,只保留 char *RetailItem::getDescription() const 。它应该可以工作

【讨论】:

  • 虽然这可能会编译,但这很可能是个坏主意(但如果没有看到更多 OP 的代码,我们不能肯定地说)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 2012-06-02
相关资源
最近更新 更多