我正在创建一个与神经网络相关的项目。当获得输出时,我想让一个神经元调用所有先前神经元的“ReturnValue”函数。我创建了一个具有上述功能的神经元类。我希望能够将这些函数指针存储在一个结构中(将其与其他一些适用的数据值配对),然后将该结构存储在一个向量中。总而言之,对于前一层中的每个神经元,向量中都会有一个条目。每个条目都是一个包含函数指针和其他一些内容的结构。我的问题是我无法首先获得指向该函数的指针。下面是一些代码来说明。
#include <iostream>
#include <vector>
struct previous_neuron_struct {
double weight;
double (*funcPtr)(); //I think that this is correct
};
class neuron {
public:
double value;
std::vector<previous_neuron_struct> previous_neurons_vector;
double Return_Value() {
return value;
}
};
int main() {
neuron neuron1;
neuron neuron2;
//I know that it would be easier to avoid pointers, but this better illustrates the environment of the actual use case.
previous_neuron_struct* temp = new previous_neuron_struct;
temp->weight = 0.5;
temp->funcPtr = neuron2.Return_Value; //<- Problem is here
//Rest of code
}
第 25 行是有问题的行。我遇到的星号或与号的组合都不允许我将 Neuron2.Return_Value() 的地址(而不是返回值)放入 temp->funcPtr 中。此示例代码现在将向我提供 Visual Studio 错误代码 0300:
a pointer to a bound function may only be used to call the function
。但与我在一些教程网站上看到的稍微不同的组合,neuron2.*Return_Value;
我得到了Identifier "Return_Value" is undefined
。谢谢
声明和调用成员函数指针的语法与普通指针不同。语法如下所示:
struct previous_neuron_struct {
double weight;
double (neuron::*funcPtr)(); //syntax for declaring member function pointer
};
int main() {
//other code as before
temp->funcPtr = &neuron::Return_Value; //works now
}