无法从类型' double(ClassOne ::)()'转换成员函数输入' double(ClassOne :: *)()'

时间:2014-12-18 03:25:42

标签: c++ class

我创建了一个类,并希望在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::*)()’,错误代表什么?

1 个答案:

答案 0 :(得分:1)

此错误是因为您必须使用&ClassOne::uniform获取成员函数的地址;成员函数没有隐式衰减指向成员的指针,就像自由函数一样。

然而,一旦你做了这个修复,你将得到不同的错误;你不能使用成员函数作为generate_n的函子。它必须采用自由函数或定义了operator()的对象。

在C ++ 11(或之前的boost :: function)中,有一个名为std::function的预设仿函数模板,您可以使用{{1}从带参数的函数和给定的参数创建},其中成员函数被视为具有隐藏std::bind参数的函数;代码是:

this