C ++中变量分配中的类型不兼容

问题描述

最近,我一直在尝试使用arduino图书馆构建神经网络,然后遇到了一个图书馆,这个图书馆的字面意思是乔治·乔索斯(George Chousos)所称的Neural Network。我偶然发现了一些错误,但我设法简单地解决了这些错误,但后来我发现了错误

sketch_sep22b:24:43: error: incompatible types in assignment of 'float*' to 'float [4]' outputs = NN.FeedForward(inputs[i]);

这是我所有的代码

#include <math.h> // Include Math Library
#include <NeuralNetwork.h> // Include Neural Network Framework

const unsigned int layers[] = {4,9,4}; // First Value (Inputs),Second Value (Neurons / Hidden Layers),Third Value (Outputs)
float outputs[4] = {}; //Outputs Float

const float* /* Pointer */ inputs[1] = {1};

const float expectedOutputs[1] = {1}; //Training Values

void setup()
{
  Serial.begin(9600);
  NeuralNetwork NN(layers,NumberOf(layers));

  for (int i = 0; i < 3000; i++)
  {
    for (int j = 0; j < NumberOf(inputs); j++)
    {

      for (int i = 0; i < NumberOf(inputs) - 1; i++)
      {
        outputs = NN.FeedForward(inputs[i]);
        Serial.println(outputs[0],7);
      }

      NN.print();
    }
  }
}

编辑:

FeedForward的声明为:

float *FeedForward(const float *inputs); // Moves Calculated outputs as inputs to next layer.

解决方法

好的,我查看了链接和声明。第一个问题,也是导致编译器错误的一个问题,是返回类型。该声明期望输出是指针,而不是数组。因此,将OneToOneField(User)的声明更改为:

output

应修复编译器错误。我没有尝试过,但这似乎是编译器正在捕获的问题。这可能会返回一个指向4个浮点数的数组的指针,一旦完成,您将需要在以后对它们进行释放(使用float* outputs; //Outputs Float free,具体取决于库如何分配内存)。它将导致内存泄漏。

正如其他人所指出的那样,您当前的delete[]声明正在尝试访问导致未定义行为的固定内存位置(1),因此,您仍然需要解决此问题。由于该库似乎希望输入具有4个浮点值的输入,因此您应该为它提供一个在编译时声明了4个浮点值的数组,或者可以在运行时动态分配一个具有4个值的数组。

第一个选项如下:

input

第二个选项如下:

const float inputs[4] = {1.0,2.0,3.0,4.0};