C++ C+中变量赋值的不兼容类型+;

C++ C+中变量赋值的不兼容类型+;,c++,arrays,neural-network,arduino,backpropagation,C++,Arrays,Neural Network,Arduino,Backpropagation,最近,我一直在尝试用arduino库制作一个神经网络,我发现了一个库,它的字面意思是George Chousos称之为神经网络。我偶然发现了几个错误,我很简单地解决了,但后来我发现了 sketch_sep22b:24:43:错误:将“float*”赋值为“float[4]”输出=NN.前馈(输入[i])时类型不兼容 这是我的全部代码: #include <math.h> // Include Math Library #include <NeuralNetwork.h>

最近,我一直在尝试用arduino库制作一个神经网络,我发现了一个库,它的字面意思是George Chousos称之为
神经网络
。我偶然发现了几个错误,我很简单地解决了,但后来我发现了

sketch_sep22b:24:43:错误:将“float*”赋值为“float[4]”输出=NN.前馈(输入[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();
    }
  }
}

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

float* outputs; //Outputs Float
应该修复编译器错误。我还没有尝试过,但这似乎是编译器要解决的问题。这可能会返回一个指针,指向一个包含4个浮点数的数组,您需要在以后取消分配该数组(使用
free
delete[]
,具体取决于库如何分配内存),否则会造成内存泄漏

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

第一个选项如下所示:

const float inputs[4] = {1.0, 2.0, 3.0, 4.0};
第二个选项看起来像:

float* input;

...

input = new float[4];
input[0] = 1.0;
input[1] = 2.0;
input[2] = 3.0;
input[3] = 4.0;

...

output = NN.FeedForward(input);

...

delete[] input;

你可以发布NoalAld::前馈吗?你不能只复制指针到指针,使用<代码> = /Cord>,你需要使用一些东西,比如<代码> MeMCPY ,或者更好的是,利用C++标准库,如果可以的话,使用<代码> STD::向量< /代码>。他们太愚蠢了。必须为元素赋值。“const float expectedoutput[1]={1};”只有一个元素的数组的点是什么?为什么要将其设置为数组?@Delta_G这只是暂时的,我正在为神经网络收集数据,只是还没有。这是一个重要的问题,但不是被问到的问题。@user4581301为什么我的问题被否决了,我遵循了堆栈溢出建议的所有内容。@JamesB很难说清楚。可能是因为缺少一个。除了您询问的一个错误之外,所提供的示例应该能够编译,并且您可以在大约三行代码中重现该问题。如果有人能给出这样一个答案,一个100%正确但解决了另一个问题的答案,那么这个问题可能不够严格。否决票可能是因为你没有链接到你的库。把你评论中的链接放到问题中,我会投票让你回到零。
float* input;

...

input = new float[4];
input[0] = 1.0;
input[1] = 2.0;
input[2] = 3.0;
input[3] = 4.0;

...

output = NN.FeedForward(input);

...

delete[] input;