0

我目前正在尝试使用 Boost::accumulators,但在构造函数中初始化时出现编译错误。请查看下面的课程详细信息。

Environment:
Mac OSX Yosemite
G++ version: 
4.2.1
Boot Version: 1.55

代码:

class test
{
    public:
        test();
        test(unsigned char windowSize=5): acc(tag::rolling_window::window_size=windowSize){}
    protected:
        accumulator_set<unsigned short, stats<tag::rolling_mean > >  acc;
    private:
};

错误:

/usr/local/boost/include/boost/accumulators/statistics/rolling_window.hpp|49|error: no viable overloaded operator[] for type 'const boost::parameter::aux::arg_list<boost::parameter::aux::tagged_argument<boost::accumulators::tag::accumulator, boost::accumulators::accumulator_set<unsigned short, boost::accumulators::stats<boost::accumulators::tag::rolling_mean, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, void> >, boost::parameter::aux::empty_arg_list>'|

-----------
/usr/local/boost/include/boost/parameter/aux_/arg_list.hpp|346|note: candidate function not viable: no known conversion from 'keyword<tag::rolling_window_size>' to 'const keyword<key_type>' for 1st argument|
-------------------
4

2 回答 2

1

您可能缺少一些包含,导致初始化程序 ET 中的类型不完整:

Live On Coliru

#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>
#include <boost/accumulators/statistics/rolling_window.hpp>
#include <boost/accumulators/statistics/rolling_mean.hpp>
#include <iostream>

namespace ba = boost::accumulators;

class test
{
    public:
        test();
        test(unsigned char windowSize=5): acc(ba::tag::rolling_window::window_size = windowSize){}
    protected:
        ba::accumulator_set<unsigned short, ba::stats<ba::tag::rolling_mean > >  acc;
    private:
};

int main()
{
}
于 2015-08-17T12:13:04.690 回答
0

感谢您的留言。我已经包含了所有必需的文件,但看起来有一个重载的构造函数可能会导致这种情况。我已经删除了所有的构造函数,只保留了一个初始化列表,它开始工作了。再次感谢。

代码:

#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>
#include <boost/accumulators/statistics/rolling_window.hpp>
#include <boost/accumulators/statistics/rolling_mean.hpp>  
#include <iostream>
namespace ba = boost::accumulators;

class test
{
 public:
    test(unsigned char windowSize=5):         acc(ba::tag::rolling_window::window_size = windowSize){}
protected:
    ba::accumulator_set<unsigned short, ba::stats<ba::tag::rolling_mean > >    acc;
private:
};
于 2015-08-18T17:05:32.527 回答