Получение этих ошибок в моих уравнениях для A и B, а затем из других ошибок в конце кальцита, когда я пытаюсь передать его в slopeit
[Ошибка] недопустимые операнды типов «int [3]» и «int [3]» для двоичного «оператора *» [Ошибка] недопустимые операнды типов «double» и «int [3]» для двоичного «оператора *» [Ошибка] неправильное преобразование из 'int' в 'double *' [-fpermissive] [Ошибка] не может преобразовать 'int *' в 'double *' для аргумента '2' в '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
массив для функции.
И в вашем вызове slopeit () вы вызываете первый аргумент с board вместо board. доска двойная, доски двойная [].
[Ошибка] недопустимые операнды типов «int [3]» и «int [3]» для двоичного
‘Оператор *
Эта ошибка вызвана следующей строкой:
A = (slops * boards) + yofslopes;
И помои, и доски относятся к типу double [3]. C ++ не может умножать массивы. Вам нужно будет использовать другой класс, который может его поддерживать, например QVector3D класс в библиотеке Qt, или вам нужно будет рассчитать продукт (перекрестный продукт или точечный продукт) в цикле for самостоятельно.
[Ошибка] недопустимые операнды типов ‘double’ и ‘int [3]’ для двоичного
‘Оператор *
Эта ошибка вызвана следующей строкой:
B = (yofslopes * boards) + yints;
Тип yofslopes двойной, а доски двойные [3]. Точно так же C ++ не поддерживает выполнение таких операций. Это несовместимые типы. Возможно, вы захотите выполнить цикл for, чтобы умножить каждый элемент на yofslopes (это то, что вы ищете?). Вы также не можете добавить один массив в другой массив.
Непонятно, что вы пытаетесь сделать здесь, потому что вот анализ модулей этой строки:
double = (double * 3dVector) + 3dVector
Это не имеет смысла …
[Ошибка] неправильное преобразование из ‘int’ в ‘double *’ [-fpermissive]
Эта ошибка из следующей строки:
slopeit(board, slops, indx, slopsofslops, yofslopes, rsq);
У вас есть глобальная переменная с именем board, которая имеет тип double (не double *). Затем вы определили локальную переменную (в параметрах calcit) с тем же именем, но с типом int (не double *). Вы не должны передавать целое число и интерпретировать его как указатель без явного приведения.
[Ошибка] не может преобразовать ‘int *’ в ‘double *’ для аргумента ‘2’ в ‘void
slopeit
Не уверен, что указывает на эту ошибку.
Надеюсь это поможет!
Вам нужно передать указатели на функцию в соответствии с вашим определением
slopeit(board, slops, indx, *slopsofslops, *yofslopes, *rsq);
}
void slopeit(double x[], double y[], int n, double& m, double& b, double& r)