Candidate function not viable: no known conversion from 'double' to 'double **' for 7th argument
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
StringGrid1->Cells[0][0]=" N";
StringGrid1->Cells[0][1]=" A";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
double F(double);
void Trap(double, double, double, int);
void Tab(double,double,double, int, int, double, double**, double**,double*,double*);//Tabulirovanie
void RezOut(double, double, int, double*, double*, double**, double**, int, int);
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double
Xn = StrToFloat(Edit1->Text),
Xk = StrToFloat(Edit2->Text),
Dx = StrToFloat(Edit3->Text),
C = StrToFloat(Edit5->Text),
D = StrToFloat(Edit6->Text),
Eps = StrToFloat(Edit8->Text), // погрешность
Del,In,
b;// Значение интеграла
int
N = StrToInt(Edit4->Text), // количество значений параметра А - количество столбцов
Km = StrToFloat(Edit7->Text), LT,
K;// количество значений аргумента Х - количество строк
K =(int) fabs((Xn-Xk)/Dx) + 1;
double *Mx = new double [K]; // Mx- указатель на выделенный участок памяти под массив вещественных чисел типа double
double *Ma = new double [N]; // Ma- указатель на выделенный участок памяти под массив вещественных чисел типа double
double **My = new double*[K];
for(int i = 0; i<K; i++){
My[i] = new double[N];
}
double **Er = new double*[K];
for(int i = 0; i<K; i++){
Er[i] = new double[N];
}
//Проверка на наличие ошибок
if (Eps>=1 || Eps<=0) {ShowMessage("Погрешность должна быть больше 0 и меньше 1!");}
else{
if(b!=0){
Trap(C, D, Eps, Km); //Подсчёт Параметра B
Tab(Xn, Xk, Dx, N, K, b, **My, **Er, *Mx, *Ma);
RezOut(b, Del, LT, *Mx, *Ma, **My, **Er, K, N);
ShowMessage("Dibil"+FloatToStr(b)+"? ");
} else ShowMessage("Решение не найдено за "+ IntToStr(Km)+" итераций");
}
// Освобождение памяти
delete [] Mx;
delete [] Ma;
for(int i = 0; i< K; i++){
delete[]My[i];
}
delete [] My;
for(int i = 0; i< K; i++){
delete[]Er[i];
}
delete [] Er;
}
//Нелинейное уравнение
double F(double X){
return X/(cos(2*X)*cos(2*X)*cos(2*X)*cos(2*X));
}
void Trap(double C, double D, double Eps, int Km){
int i = 1, LT;
double Yl, Yn, H, b, X, Del, In;
int I, J, M, Er = 1;
Yl = F(C);
Yn = F(D);
b = 0;
M = 2;
LT = 0;
J = 1;
while(J <= Km){
H = (D - C)/M;
X = C + H;
In = 0;
for(I = 1; I < M; I++){
In = In + F(X);
X = X + H;
}
In = H*(Yl/2+Yn/2 + In);
Del = fabs(b - In);
if(Del< Eps){
LT = J;
J = Km;
Er = 0;
}
else {
b = In;
M = M*2;
}
J = J + 1;
}
Form1->Edit9->Text = FloatToStr(b);
}
//Табулирование Функции
void Tab(double Xn, double Xk, double Dx, int N, int K, double b, double**My, double**Er, double *Mx, double *Ma){
for(int i = 0; i < N; i++){
Form1->StringGrid1->Cells[0][i] = "A" + FloatToStr(i);
Ma[i] = StrToFloat( Form1->StringGrid1->Cells[1][i]);
}
for (int i = 0; i < K; i++) {
Mx[i] = Xn;
Xn = Xn + Dx;
}
ShowMessage("Dibil");
for (int i = 0; i < K; i++) {
for (int j = 0; j < N; j++) {
if(Mx[i]>-1.15){
My[i][j] = sqrt(b)*log((pow(Mx[i],2*b)+ pow(Ma[j], 2*Mx[i]))/(18+sqrt(3+pow(2*Mx[i],3))));
Er[i][j] = 0;
}
else Er[i][j] = 1;
}
}
}
//Вывод результатов
void RezOut(double b, double Del, int LT, double *Mx, double *Ma, double **My, double **Er, int K, int N){
Form1->StringGrid2->ColCount = N + 1;
Form1->StringGrid2->RowCount = K + 2;
for (int i = 1; i<= N; i++)
{
Form1->StringGrid2->Cells[i][0] = Ma[i];
}
for (int j = 1; j<= K+1; j++)
{
Form1->StringGrid2->Cells[0][j] = Mx[j];
}
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= K+1; j++)
{
Form1->StringGrid2->Cells[i][j] = FloatToStr(My[i][j]);
}
}
/*Form1->Edit9->Text = FloatToStrF(b, ffGeneral, 10, 6);
Form1->Edit10->Text = FloatToStrF(Del, ffGeneral, 10, 6);
Form1->StringGrid2->RowCount = K + 1;
Form1->StringGrid2->ColCount = N + 1;
Form1->StringGrid1->Cells[0][0] = "X/A";
ShowMessage("You are a DOWN!!!");
for (int i = 0; i < N; i++) {
Form1->StringGrid2->Cells[i+1][0] = "A[" + IntToStr(i)+"]=" + FloatToStr(Ma[i]);
for (int j = 0; j < K; j++) {
Form1->StringGrid2->Cells[0][j+1] = "X[" + IntToStr(j)+"]=" + FloatToStr(Mx[j]);
if(Er[i][j] == 1){
Form1->StringGrid2->Cells[i+1][j+1] = "Err";
}
else
Form1->StringGrid2->Cells[i+1][j+1] = FloatToStrF(My[i][j], ffGeneral, 6, 5);
}
} */
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit4MouseLeave(TObject *Sender)
{
int Q = StrToInt(Edit4->Text); // noun of parametres A
Form1->StringGrid1->ColCount = Q + 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Edit2->Clear();
Edit3->Clear();
Edit4->Clear();
Edit5->Clear();
Edit6->Clear();
Edit7->Clear();
Edit8->Clear();
Edit9->Clear();
Edit10->Clear();
Edit11->Clear();
}
//---------------------------------------------------------------------------
Выдает ошибку Unit1.cpp(27): candidate function not viable: no known conversion from 'double' to 'double **' for 7th argument для подпрограммы Tab. Хотя прототипы созданы и, вроде как, ошибок в объявлении динамических массивов компилер не нашел. Помогите пжалста!
Спасибо
Ответы (1 шт):
Автор решения: Zugr
→ Ссылка
Возьмём к примеру Вашу такую строку:
RezOut(b, Del, LT, *Mx, *Ma, **My, **Er, K, N);
Зачем Вы написали ** My? Ведь у My тип double**, а у ** My просто double. Но функция RezOut() в этом параметре ожидает получить именно double**! По идее правильно будет написать
RezOut(b, Del, LT, Mx, Ma, My, Er, K, N);
Ну и в других местах также.