我创建了一个类,并希望在C ++中按generate_n
初始化参数。
以下是代码:
#include <algorithm>
#include <math.h>
using namespace std;
class HiddenLayer
{
public:
double *W;
double *b;
ClassOne(int low, int high)
{
this->low = low;
this->high = high;
this->W = new double[100];
this->b = new double[100];
generate_n(W, 100, uniform);
};
~ClassOne()
{
delete[] W;
delete[] b;
};
private:
double low;
double high;
double uniform() {
return rand() / (RAND_MAX + 1.0) * (high - low) + low;
};
};
报告的错误是cannot convert ‘ClassOne::uniform’ from type ‘double (ClassOne::)()’ to type ‘double (ClassOne::*)()’
,错误代表什么?
答案 0 :(得分:1)
此错误是因为您必须使用&ClassOne::uniform
获取成员函数的地址;成员函数没有隐式衰减指向成员的指针,就像自由函数一样。
然而,一旦你做了这个修复,你将得到不同的错误;你不能使用成员函数作为generate_n
的函子。它必须采用自由函数或定义了operator()
的对象。
在C ++ 11(或之前的boost :: function)中,有一个名为std::function
的预设仿函数模板,您可以使用{{1}从带参数的函数和给定的参数创建},其中成员函数被视为具有隐藏std::bind
参数的函数;代码是:
this