C++ C代码可以编译,但在arduino sketch中它不';T
我有一些用GNU GCC编译的C代码,但当我把它放在arduino草图上时,它说 无法将参数“1”的“const float”转换为“float()[25]”以 '浮点数积(浮点数()[25],浮点数*)' 在草图中有函数sigmoid和forward以及dot_p,它们都已定义,我试图在草图本身上存储一些值,因为我无法在EEPROM上存储所有值,如果您能提供帮助,请提供任何额外的澄清 草图如下:C++ C代码可以编译,但在arduino sketch中它不';T,c++,arduino,arduino-c++,C++,Arduino,Arduino C++,我有一些用GNU GCC编译的C代码,但当我把它放在arduino草图上时,它说 无法将参数“1”的“const float”转换为“float()[25]”以 '浮点数积(浮点数()[25],浮点数*)' 在草图中有函数sigmoid和forward以及dot_p,它们都已定义,我试图在草图本身上存储一些值,因为我无法在EEPROM上存储所有值,如果您能提供帮助,请提供任何额外的澄清 草图如下: #include <LiquidCrystal.h> const int rs = 1
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const float a[25][25] = { A LONG LIST OF NUMBERS arranged in 25X25};
float b[25]={Another list of numbers};
void setup() {}
void loop() {}
float dot_product(float v[][25], float u[])
{
for (int j = 0; j< 25; j++){
float result = 0.0;
for (int i = 0; i < 25; i++){
result += u[i]*v[j][i];
}
return result;
}
}
double forward(float x){
float lm[25];
double km[25];
double t=0;
double output=0;
for(int i=0; i <25; i++){
lm[i] = 0;
km[i] = 0;
}
for (int k=0; k<25; k++){
lm[k]= dot_product(a[k],x);
/*** THIS IS THE ERROR SOURCE***/
}
for (int j=0; j<25;j++){
km[j] = sigmoid(lm[j]);
}
t = dot_p(km,b);
output = sigmoid(t);
return output;
}
#包括
常数int rs=12,en=11,d4=5,d5=4,d6=3,d7=2;
液晶显示器(rs、en、d4、d5、d6、d7);
const float a[25][25]={25X25中排列的一长串数字};
浮点数b[25]={另一个数字列表};
void setup(){}
void loop(){}
浮点数积(浮点数v[][25],浮点数u[]
{
对于(int j=0;j<25;j++){
浮动结果=0.0;
对于(int i=0;i<25;i++){
结果+=u[i]*v[j][i];
}
返回结果;
}
}
双向前进(浮动x){
浮动lm[25];
双公里[25];
双t=0;
双输出=0;
对于(int i=0;i,在删除所有“不需要的”代码并纠正几个小错误后,结果是:
// if you really want 'const',
// then all references must also be 'const'
float a[25][25];
// the second parameter is from a float value
// not from an array of float values
float dot_product( float v[][25], float u )
{
// initialize the float variable from a float literal
// rather than from a double literal
float result = 0.0f;
for (int i = 0; i < 25; i++)
{
// since the function exits after summing a single
// row, the 'j' is replaced with 0
result += u * v[0][i];
}
return result;
}
void forward(float x)
{
float lm = 0.0f;
for (int k=0; k<25; k++)
{
// note: passing address of 'a[k]'
lm += dot_product( &a[k], x );
}
}
//如果您真的想要“const”,
//那么所有引用也必须是“const”
浮动a[25][25];
//第二个参数来自浮点值
//不是来自浮点值数组
浮点数积(浮点数v[][25],浮点数u)
{
//从浮点文本初始化浮点变量
//而不是从一个双重文字
浮动结果=0.0f;
对于(int i=0;i<25;i++)
{
//由于函数在求和单个
//第行,将“j”替换为0
结果+=u*v[0][i];
}
返回结果;
}
无效前进(浮动x)
{
浮动lm=0.0f;
对于(int k=0,KC还是C++代码?``ANTTI)?当前它将一个浮点变成指针(数组参数是指针)。GCC不应在没有大量警告的情况下接受此代码。即使GCC编译了此代码,它也无法工作。点积函数通常在参数处接受2个向量,但它被定义为接受一个矩阵和一个向量,并且您向它提供一个向量和一个标量。在不知道它应该做什么的情况下,不可能修复此代码。目前这是一个明智的猜测。它更容易被编译为C++,但是在那里调用构造函数调用……编译它是很容易的。让它做它应该做的事情是没有更多信息的困难。尤其是猜测<代码>前进/ <代码>的目的是什么,是有问题的。一个叫做代码> dotl产品< /代码>的函数。d通常计算两个向量的点积。只是在posters代码上进行黑客攻击,直到它编译,而不考虑代码应该做什么,这通常不是很有帮助。但是,这个答案只是显示了原始代码有多混乱