0

我得到的错误是 randm.cpp:42:52: error: no matching function for call to 'Neuron::activationFunc(double&, double&)' neu.activationFunc(feature[2][4], predicted[2][ 1]);

是否可以传递数组或者我必须找到另一种方法?这是我的代码。自从我使用课程以来已经有几年了,所以我有点生疏了。

#include <fstream> #include <sstream> #include <iostream> #include <cstdlib> using namespace std; int correct = 0; class Neuron { //double (&features)[150][4]; public: double alpha = 0.5; double w1 = 1.0; double w2 = -1; double w3 = 0.5; double w4 = 0; double x = 0; int theta = 1; int hardLim = 0; int track = 0; //void testClass(); void activationFunc(double feature[2][4], double predicted[2][1]); }; void Neuron::activationFunc (double feature[2][4], double predicted[2][1]) { for (int i = 0; i < 2; i++) { x = (w1*feature[i][0]) + (w2*feature[i][1]) + (w3*feature[i][2]) + (w4*feature[i][3]) + predicted[2][1]; cout <<"\n X value is: " << x << endl; //hardLimit(x); //track = i; } } int main(int argc, char* argv[]) { //feature = col 1-4, predicted = col 5 double feature[2][4]={1,2,3,4,5,6,7,8}; double predicted[2][1]={4,5}; Neuron neu; neu.activationFunc(feature[2][4], predicted[2][1]); }

谢谢。PS 我知道我的代码中有一些尚未使用的东西。

4

2 回答 2

1

要使其编译,您需要更改此行:

neu.activationFunc(feature[2][4], predicted[2][1]);

所以它看起来像这样:

neu.activationFunc(feature, predicted);
于 2019-04-14T19:27:41.113 回答
0

您可以通过引用或指针传递多维数组:

您的方法原型应如下所示:

class Neuron {
    //...
    void activationFunc(double(&)[2][4], double(&)[2][1]);
};

以及定义:

void Neuron::activationFunc (double (&feature)[2][4], double (&predicted)[2][1]) {
    for (size_t i{}; i != 2; ++i) {
        x = (w1 * feature[i][0]) + (w2 * feature[i][1]) + 
            (w3 * feature[i][2]) + (w4 * feature[i][3]) + predicted[1][0];
        std::cout << "X value is: " << x << std::endl;
    }

}

主要只是传递数组名称:

neu.activationFunc(feature, predicted);
  • 循环中有一个未定义的行为:

    x = (w1*feature[i][0]) + (w2*feature[i][1]) + (w3*feature[i][2]) + (w4*feature[i][3]) + predicted[2][1];
    

predicted是一个[2][1]维度数组,因此有效范围[1][0]不是[2][1]

于 2019-04-14T19:59:34.830 回答