【问题标题】:Taking adress of temporary error while using overloaded operator使用重载运算符时获取临时错误的地址
【发布时间】:2012-05-19 19:03:21
【问题描述】:

我的 c++ 项目中有一个字符串类。我必须使用双链表并制作自己的字符串类。在我的字符串类中,我必须重载 <>== 运算符。其实我是这样做的。但是在我的另一个类中,我有一个列表函数来比较我的字符串类。在这个比较中,我遇到了“临时地址”错误。

这是我的字符串类:

#include "String.h"

String::String(int coming)
{
   x=coming;
}

int  String::getX()
{
    return x;
}

String String::operator==(String *taken)
{
    return String (x==taken->x);
}

这是我的列表方法:

void myclass::list(String *taken)
{
    otherclass *temp=head;

    while(temp!=NULL)
    {
        if(&temp->get_string()==taken)//where i get error message.
            cout<<temp<<endl;
        temp=temp->get_nextnode();
    }
}

【问题讨论】:

  • 试试temp-&gt;get_string() == *taken,[更正] 或temp-&gt;get_string() == taken

标签: c++ overloading temporary


【解决方案1】:

编译器准确地告诉你问题:你不能获取临时对象的地址。 temp-&gt;get_string() 是一个临时对象1,您正在尝试获取它的地址。

我不太确定你的目标是什么,所以我无法提出解决办法。但我强烈建议将String::operator== 定义为将指针作为右侧会导致混淆。让它返回另一个String 也没什么意义;通常人们会期望 == 评估为布尔值。


1。嗯,大概。你还没有展示get_string()的声明。

【讨论】:

  • 'String myclass::get_String() { return mystring; }' 它是我的 get_string 声明。我认为我的设计存在很大问题。
  • @namcojoulder:是的,我同意。我认为你需要依次评估你的每个函数,并考虑它应该返回什么类型,应该将什么类型作为参数,以及为什么在这里需要指针。
  • 我的目标是将两个字符串与一个重载的运算符进行比较。
  • @namcojoulder:嗯,应该看起来像bool String::operator==(const String &amp;taken)
  • 我是这样做的并且工作正常。我正要这么说。您在我之前发表了评论:D 感谢您的回答。
猜你喜欢
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多