必须调用非静态成员函数

Non-static member function must be called

本文关键字:静态成员 函数 调用      更新时间:2023-10-16

在64位Mac w/-std=gnu++0x上编译会出现以下错误:

.../include/utils/common_types.h:93:37: error: reference to non-static member function must be called
    bool valid_min = StringToNumber(min, &min_)
                                    ^~~
.../include/utils/common_types.h:94:43: error: reference to non-static member function must be called
        && Fraction::FromFloatPointString(min, &min_fract_);
                                          ^~~
.../include/utils/common_types.h:95:37: error: reference to non-static member function must be called
    bool valid_max = StringToNumber(max, &max_)
                                    ^~~
.../include/utils/common_types.h:96:43: error: reference to non-static member function must be called
        && Fraction::FromFloatPointString(max, &max_fract_);
                                          ^~~

在32位Ubuntu上可以很好地编译。

  BasicRange(const std::string& min_str, const std::string& max_str)
      : min_(0),
        max_(0) {
    bool valid_min = StringToNumber(min, &min_)
        && Fraction::FromFloatPointString(min, &min_fract_);
    bool valid_max = StringToNumber(max, &max_)
        && Fraction::FromFloatPointString(max, &max_fract_);
    assert(valid_min && valid_max);
  }

我想知道如何在32位的Ubuntu上编译这些代码。

看起来有效的代码应该是这样的

  BasicRange(const std::string& min_str, const std::string& max_str)
      : min_(0),
        max_(0) {
    bool valid_min = StringToNumber(min_str, &min_)
        && Fraction::FromFloatPointString(min_str, &min_fract_);
    bool valid_max = StringToNumber(max_str, &max_)
        && Fraction::FromFloatPointString(max_str, &max_fract_);
    assert(valid_min && valid_max);
  }

也就是说,不是minmax,而是min_strmax_str

在变量名中使用最后一个下划线也是一个非常愚蠢的想法。不要模仿一些白痴的行为,即使他们是众所周知的。

看起来你有minmax作为类的成员函数。

将代码改为:

BasicRange(const std::string& min_str, const std::string& max_str)
    : min_(0),
      max_(0) {
  bool valid_min = StringToNumber(min(), &min_)
      && Fraction::FromFloatPointString(min(), &min_fract_);
  bool valid_max = StringToNumber(max(), &max_)
      && Fraction::FromFloatPointString(max(), &max_fract_);
  assert(valid_min && valid_max);
}

您的参数称为min_strmax_str,但在下面的代码中您不使用它们,而是使用minmax。这些大概是min_max_属性的getter,所以当编译器看到它们时,它会抱怨你引用了成员函数而没有调用它们。