微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。