【发布时间】:2017-02-27 04:14:39
【问题描述】:
我正在尝试访问我的 Fraction 类的一个名为“compare”的成员函数,它接受 2 个参数,都是 Fraction 对象。为什么我可以调用比较函数的唯一方法是通过 Fraction 类的成员?例如,我有以下代码:
bool operator==(Fraction a, Fraction b) {
if (compare(a, b) < 0) { // this line gives an error during compilation
// Do stuff
}
return true;
}
int Fraction::compare(Fraction a, Fraction b) {
// do stuff
return 0;
}
在调用 compare 的行给出的错误,它给出了以下消息:
..\fraction.cpp:107:18: 错误:未在此范围内声明“比较”
如果我将该行更改为以下内容,它会起作用。
if (a.compare(a, b) < 0) {
调用 compare 的唯一方法是执行a.compare 似乎是多余的,此时 a 无论如何都是函数的输入参数。我知道我可以通过使运算符重载函数成为友元函数来摆脱这种情况,但我被要求将其实现为非成员函数。
有没有办法让这个函数 static 像在 Java 中一样,我可以调用 Fraction.compare(a, b),或者这在 C++11 中是不可能的?
提前感谢您的帮助。
【问题讨论】:
-
你可以比较一个静态成员函数并将其命名为 Fraction::compare(a,b)
-
你有什么问题?
compare是一个非静态成员函数,当你在非成员函数中调用它时,你需要一个实例来调用它。您想将其更改为非成员函数吗?还是静态成员函数?还是别的什么? -
所以你知道你要找的东西的名字:一个静态成员函数。这里有什么障碍,为什么你需要帮助弄清楚语法?
-
@Cimbali 是的,这是一个语法问题。我习惯于通过点运算符访问静态成员的 Java,当我在 C++ 中尝试它时,它给出了非常模糊的建议。现在一切都好
标签: c++ c++11 member-functions