C++ 将多个对象数组传递给函数

C++ 将多个对象数组传递给函数,c++,C++,我得到的错误是randm.cpp:42:52:错误:调用'Neuron::activationFunc(double&,double&)'neu.activationFunc(功能[2][4],预测[2][1])时没有匹配的函数 是否可以传递数组,或者我必须找到另一种方法来传递数组?这是我的密码。我已经好几年没有上课了,所以我有点生疏了 #包括 #包括 #包括 #包括 使用名称空间std; int correct=0; 类神经元{ //双功能[150][4]; 公众: 双α=0.5; 双w1=

我得到的错误是randm.cpp:42:52:错误:调用'Neuron::activationFunc(double&,double&)'neu.activationFunc(功能[2][4],预测[2][1])时没有匹配的函数

是否可以传递数组,或者我必须找到另一种方法来传递数组?这是我的密码。我已经好几年没有上课了,所以我有点生疏了

#包括
#包括
#包括
#包括
使用名称空间std;
int correct=0;
类神经元{
//双功能[150][4];
公众:
双α=0.5;
双w1=1.0;
双w2=-1;
双w3=0.5;
双w4=0;
双x=0;
intθ=1;
int hardLim=0;
int轨道=0;
//void testClass();
无效激活函数(双特征[2][4],双预测[2][1]);
};
void Neuron::activationFunc(双特征[2][4],双预测[2][1]){
对于(int i=0;i<2;i++){
x=(w1*特征[i][0])+(w2*特征[i][1])+(w3*特征[i][2])+(w4*特征[i][3])+预测[2][1];

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

neu.activationFunc(feature[2][4], predicted[2][1]);
所以它看起来像这样:

neu.activationFunc(feature, predicted);

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

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

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;
    }

}
  • 循环中存在未定义的行为:

    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]
将数组放入结构中,然后传递结构。
结构特征{double value[2][4];};
结构预测{double value[2][1];};
可能重复打开更多警告。您正在访问数组边界以外的元素。
预测[2][1]
neu.activationFunc(功能[2][4],预测[2][1]);
您没有传递多维数组,但只传递一个元素。为此,只传递数组的名称:
neu.activationFunc(功能,预测);
`注意,这里省略了“数组大小”,因为它们是下标(选择单个元素,尽管它们当然超出范围)。
neu.activationFunc(feature, predicted);
x = (w1*feature[i][0]) + (w2*feature[i][1]) + (w3*feature[i][2]) + (w4*feature[i][3]) + predicted[2][1];