【问题标题】:Can't call a method in the same class while overriding == operator c++覆盖== operator c ++时无法调用同一类中的方法
【发布时间】:2013-12-14 22:26:28
【问题描述】:

我试图在我的项目中为 String_Data 类覆盖 == 运算符。 String_Data 有一个 getString() 方法,它返回 String_Data 对象中保存的字符串。我试图在我的 == 覆盖中调用此方法来比较两个 String_Data 对象持有的字符串。但是,当我这样做时,我被告知我用作参数的 String_Data 对象没有这样的方法。我不确定出了什么问题,但任何帮助将不胜感激。这是我的代码。

#include "stdafx.h"
#include <vector>
#include <sstream> 
#include "String_Data.h"

using namespace std;

std::string myString;
int stringCount;

String_Data::String_Data(std::string URL, int useCount)
{
    stringCount = useCount;
    myString = URL;
}

String_Data::~String_Data(void)
{
}

bool operator == (String_Data sd, String_Data sd2) {
return (sd.getString() == sd2.getString());
}

std::string getString() {
    return myString;
}
void increment() {
    stringCount++;
}

bool compare() {

}

int getCount() {
    return stringCount;
}

提前感谢您的帮助。

【问题讨论】:

  • 我没有看到任何尝试在 op== 覆盖中调用任何内容。包括它,以及你的编译器错误
  • 您似乎想要overload 而不是override 相等运算符:类似的名称,有些相关,但完全不同。您发布的代码未显示类声明,并且发布的 getString() 函数不是成员。
  • @DietmarKühl 这可能是类声明的中间部分,内联方法
  • @KateGregory:不,不是真的:你不能用两个参数作为成员函数重载operator==()。 ...并且您不能使用类名来限定成员(尽管某些编译器有时确实允许使用限定)。
  • @DietmarKühl 哦,我知道,我只是说你不能确定 getString 不是会员。

标签: c++ visual-c++ operator-overloading overriding getter


【解决方案1】:

根据上面提供的有限信息,我猜测您没有在 String_Data 定义中正确提供 getString 方法。当您尝试从 operator == 调用它时,编译器自然会抱怨该方法不存在!

简单的解决方法是确保您在class String_Data 中提供该方法。此外,您似乎打算将myString 和stringCount 作为String_Data 的实际成员,而不是独立的全局变量。您的类定义应该看起来更像:

// String_Data.h
class String_Data
{
  std::string myString;
  int stringCount;
public:
  //...
  std::string getString();
};

而你的getString free 函数需要转换成String_Data 方法:

std::string String_Data::getString()
{
  return myString;
}

这应该可以纠正您从重载的operator == 中得到的错误。请注意,operator == 应该通过 const ref 获取其参数,因为没有任何内容被修改:

bool operator == (const String_Data &sd, const String_Data &sd2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    相关资源
    最近更新 更多