C ++ недопустимые операнды и типы

0

Получение этих ошибок в моих уравнениях для 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)
Теги:
arrays
binary
operands

4 ответа

1

C++ не имеет встроенных операторов для работы с массивами, вам необходимо создать свои собственные перегрузки.

Что касается последних ошибок, то массив (или указатель на) int не совпадает с массивом (или указателем на) double. Вы должны создать новый временный double массив, заполнить его из массива int и передать double массив функции.

0

[Ошибка] недопустимые операнды типов '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

Не уверен, что указывает эта ошибка.

Надеюсь это поможет!

0

Вам нужно передать указатели на функцию согласно вашему определению

  slopeit(board, slops, indx, *slopsofslops, *yofslopes, *rsq);
       }
  void slopeit(double x[], double y[], int n, double& m, double& b, double& r)
0

И в вашем вызове slopeit() вы вызываете первый аргумент с помощью платы вместо плат. доска двойная, доски двойные [].

Ещё вопросы

Сообщество Overcoder
Наверх
Меню