C++ C+中变量赋值的不兼容类型+;
最近,我一直在尝试用arduino库制作一个神经网络,我发现了一个库,它的字面意思是George Chousos称之为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>
神经网络
。我偶然发现了几个错误,我很简单地解决了,但后来我发现了
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;