必须调用非静态成员函数

时间:2014-03-19 17:29:47

标签: c++ gnu

在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);
  }

3 个答案:

答案 0 :(得分:2)

我想知道如何在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

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

答案 1 :(得分:1)

你的论点被称为min_strmax_str,但在下面的代码中你不能使用它,你使用minmax。这些可能是min_max_属性的getter,因此当编译器看到它们时,它会抱怨您在不调用它们的情况下引用成员函数。

答案 2 :(得分:1)

看起来你有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);
}