我的代码 -
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
#include "boost\numeric\ublas\matrix.hpp"
typedef boost::numeric::ublas::matrix<float> matrix;
class FillMat{
public:
FillMat(float valIn) : val(valIn){}
float operator()(float in) {
val = in + 1;
return val;
}
private:
float val;
};
typedef boost::numeric::ublas::matrix<float> matrix;
int main(){
matrix m1(10, 20);
float init = 22.2;
FillMat myFiller(init);
generate(m1.begin2(), m1.begin2() + m1.size1()*m1.size2(), myFiller);
return 0;
}
当我尝试编译代码时,出现以下编译时错误。
Error 3 error C2064: term does not evaluate to a function taking 0 arguments
有人可以告诉我原因吗?
P.S。我添加了标题。我正在为2D数组使用Boost矩阵。
答案 0 :(得分:2)
答案 1 :(得分:2)
可能的解决方法是改变:
float operator()(float in) {
val = in + 1;
return val;
}
成:
float operator()( void ) {
float rv = val;
val = val + 1.0;
return rv;
}
如果那样做你想要的,那就是问题......
答案 2 :(得分:2)
您正在寻找的功能是std::transform
:
std::transform(m1.begin2(),
m1.begin2() + m1.size1() * m1.size2(),
m1.begin2(),
myFiller);
答案 3 :(得分:1)
根据评论中的澄清(“我试图用增量值填充容器的内容”),你真正想要的是std::iota
。我还没有完全理解你要对matrix
做什么,以及你希望值如何增加(按行或逐列),所以我将给出一个正常的演示向量,让你弄清楚如何在实际情况中应用它:
std::vector<int> v(10);
std::iota(v.begin(), v.end(), 22.2);
for (auto i : v)
std::cout << i << " ";
应该产生:22.2 23.2 24.2 25.2 26.2 27.2 28.2 29.2 30.2 31.2