【问题标题】:Compiling with operator() under GCC 3.3 Problem in Boost在 GCC 3.3 下使用 operator() 编译 Boost 中的问题
【发布时间】:2009-02-23 02:00:18
【问题描述】:

我有以下sn-p:

#include <boost/random/lognormal_distribution.hpp>
#include <boost/random/lagged_fibonacci.hpp> 

int main() {

  const double mean  = 0.0;
  const double sigma = 1.0;

  boost::lognormal_distribution<double> lognorm_dist(mean, sigma);
  boost::lagged_fibonacci44497 engine;

  // the following line give error in GCC 3.3
  const double value = lognorm_dist.operator() <boost::lagged_fibonacci44497>((engine)); 

}

下编译正常
i686-apple-darwin9-g++-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5465)

但在:

g++ (GCC) 3.3.3 (SuSE Linux)

它给出了以下错误:

Mycode.cc:10:error: `operator()' not defined

我该如何解决这个问题?

【问题讨论】:

  • struct f { template void operator()(int) { } }; int main() { f f_; f_.operator()(0); } 这样编译了吗?
  • 不,它没有。我已经测试了你的 sn-p。
  • 你为什么要提供明确的括号?就叫它 lognorm_dist(engine);

标签: c++ gcc boost random


【解决方案1】:

为什么不只是lognorm_dist( engine );?提供“类似函数”的语法是 operator() 的重点。也就是说,如果我没记错的话,lognorm_dist.template operator() &lt;boost::lagged_fibonacci44497&gt;((engine)) 应该可以解决您的编译问题。

【讨论】:

  • 仅作记录:) 需要注意的是这是gcc3.3编译器的一个bug:这里的lognorm_dist不依赖于模板参数。使用符合标准的编译器,不需要模板消歧。 (请参阅我在问题中放入 cmets 的示例代码)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
相关资源
最近更新 更多