Получение этих ошибок в моих уравнениях для A и B, а затем другие ошибки - это в конце calcit, когда я пытаюсь передать его slopeit
[Error] invalid operands of types 'int [3]' and 'int [3]' to binary 'operator*' [Error] invalid operands of types 'double' and 'int [3]' to binary 'operator*' [Error] invalid conversion from 'int' to 'double*' [-fpermissive] [Error] cannot convert 'int*' to 'double*' for argument '2' to 'void slopeit (double*,double*, int, double&, double&, double&)'
double slops[3], yints[3], boards[3];
double yint15,yint20,yint25,slop15,slop20,slop25,rsq15,rsq20,rsq25;
double board;
void calcit (double tim15[], double tim20[], double tim25[], double tem15[],
double tem20[], double tem25[], int indx, int board,int temperature)
{
double B;
double A;
double time;
double slopsofslops;
double yofslopes;
double rsq;
double yint15,yint20,yint25,slop15,slop20,slop25,rsq15,rsq20,rsq25;
slopeit(tim15, tem15, indx, slop15, yint15, rsq15);
slopeit(tim20, tem20, indx, slop20, yint20, rsq20);
slopeit(tim25, tem25, indx, slop25, yint25, rsq25);
yints[0]=yint15;
yints[1]=yint20;
yints[2]=yint25;
boards[0]=15;
boards[1]=20;
boards[2]=25;
slops[0]=slop15;
slops[1]=slop20;
slops[2]=slop25;
indx = 3;
time = pow(e,(temperature -B)/A);
A = (slops * boards) + yofslopes;
B = (yofslopes * boards) + yints;
//Pass the values needed into writeit and finished
slopeit(board, slops, indx, slopsofslops, yofslopes, rsq);
}
void slopeit(double x[], double y[], int n, double& m, double& b, double& r)
C++ не имеет встроенных операторов для работы с массивами, вам необходимо создать свои собственные перегрузки.
Что касается последних ошибок, то массив (или указатель на) int
не совпадает с массивом (или указателем на) double
. Вы должны создать новый временный double
массив, заполнить его из массива int
и передать double
массив функции.
[Ошибка] недопустимые операнды типов 'int [3]' и 'int [3]' для двоичного 'оператора *'
Эта ошибка возникает из-за следующей строки:
A = (slops * boards) + yofslopes;
Оба шлица и доски имеют тип double [3]. C++ не может умножать массивы. Вам нужно будет использовать другой класс, который может его поддерживать, например класс QVector3D в Qt-библиотеке, или вам нужно будет вычислить продукт (либо продукт с перекрестным или точечным продуктом) в цикле for самостоятельно.
[Ошибка] неверные операнды типов "double" и "int [3]" в двоичный оператор *
Эта ошибка возникает из-за следующей строки:
B = (yofslopes * boards) + yints;
yofslopes имеет тип double, а платы - двойные [3]. Аналогичным образом, C++ не поддерживает выполнение таких операций. Они несовместимы. Вероятно, вы захотите выполнить цикл for, чтобы умножить каждый элемент на yofslopes (это вы здесь?). Вы также не можете добавить один массив в другой массив.
Непонятно, что вы пытаетесь сделать здесь, потому что здесь единичный анализ этой строки:
double = (double * 3dVector) + 3dVector
Это не имеет смысла...
[Ошибка] неверное преобразование из 'int' в 'double *' [-fpermissive]
Эта ошибка относится к следующей строке:
slopeit(board, slops, indx, slopsofslops, yofslopes, rsq);
У вас есть глобальная переменная, называемая платой, которая имеет тип double (не double *). Затем вы определили локальную переменную (в параметрах calcit) с тем же именем, но типа int (не double *). Вы не должны передавать целое число и интерпретировать его как указатель без явного его литья.
[Ошибка] не может преобразовать 'int *' в 'double *' для аргумента '2' to 'void slopeit
Не уверен, что указывает эта ошибка.
Надеюсь это поможет!
Вам нужно передать указатели на функцию согласно вашему определению
slopeit(board, slops, indx, *slopsofslops, *yofslopes, *rsq);
}
void slopeit(double x[], double y[], int n, double& m, double& b, double& r)
И в вашем вызове slopeit() вы вызываете первый аргумент с помощью платы вместо плат. доска двойная, доски двойные [].