函数编译时错误
Functor compile time error
我的代码 -
#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。我添加了 headers。我正在为二维数组使用 Boost 矩阵。
您传递给 std::generate
的仿函数的签名必须采用零参数。
这在documentation中有说明。
很遗憾,您没有告诉我们您要做什么,所以我无法为您提供修复建议。
可能的解决方法是更改:
float operator()(float in) {
val = in + 1;
return val;
}
进入:
float operator()( void ) {
float rv = val;
val = val + 1.0;
return rv;
}
如果这符合您想要的,那就是问题...
您要找的函数是std::transform
:
std::transform(m1.begin2(),
m1.begin2() + m1.size1() * m1.size2(),
m1.begin2(),
myFiller);
根据评论中的说明 ("I am trying to fill the contents of my container such with incrementing values"),您真正想要的是 std::iota
。我还没有完全弄清楚你想用你的 matrix
做什么,以及你希望值如何增加(按行或按列),所以我将给出一个正常的演示vector,让你自己想办法在实际情况下应用:
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
我的代码 -
#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。我添加了 headers。我正在为二维数组使用 Boost 矩阵。
您传递给 std::generate
的仿函数的签名必须采用零参数。
这在documentation中有说明。
很遗憾,您没有告诉我们您要做什么,所以我无法为您提供修复建议。
可能的解决方法是更改:
float operator()(float in) {
val = in + 1;
return val;
}
进入:
float operator()( void ) {
float rv = val;
val = val + 1.0;
return rv;
}
如果这符合您想要的,那就是问题...
您要找的函数是std::transform
:
std::transform(m1.begin2(),
m1.begin2() + m1.size1() * m1.size2(),
m1.begin2(),
myFiller);
根据评论中的说明 ("I am trying to fill the contents of my container such with incrementing values"),您真正想要的是 std::iota
。我还没有完全弄清楚你想用你的 matrix
做什么,以及你希望值如何增加(按行或按列),所以我将给出一个正常的演示vector,让你自己想办法在实际情况下应用:
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