在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);
}
答案 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);
}
而不是min
和max
必须有min_str
和max_str
在变量名中使用最后一个下划线也是一个非常愚蠢的想法。不要复制一些白痴的行为,即使它们是众所周知的。
答案 1 :(得分:1)
你的论点被称为min_str
和max_str
,但在下面的代码中你不能使用它,你使用min
和max
。这些可能是min_
和max_
属性的getter,因此当编译器看到它们时,它会抱怨您在不调用它们的情况下引用成员函数。
答案 2 :(得分:1)
看起来你有min
和max
作为班级的成员函数。
将代码更改为:
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);
}