lily19 0 / 0 / 0 Регистрация: 30.09.2016 Сообщений: 11 |
||||
1 |
||||
12.10.2016, 16:30. Показов 11377. Ответов 3 Метки нет (Все метки)
пожалуйста проверьте и помогите исправить ошибки:
выдает ошибки: [Error] cannot convert ‘double (*)(double)’ to ‘double’ for argument ‘1’ to ‘double pow(double, double)’
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
12.10.2016, 16:30 |
3 |
zss Модератор 12641 / 10135 / 6102 Регистрация: 18.12.2011 Сообщений: 27,170 |
||||
12.10.2016, 16:34 |
2 |
|||
pow(exp,(pow(x,2))) это
Добавлено через 1 минуту
sqrt(x,2) Это что такое. у sqrt один аргумент
0 |
0 / 0 / 0 Регистрация: 30.09.2016 Сообщений: 11 |
|
12.10.2016, 16:41 [ТС] |
3 |
извините, нет не помогло… там Добавлено через 1 минуту Добавлено через 3 минуты
0 |
zss Модератор 12641 / 10135 / 6102 Регистрация: 18.12.2011 Сообщений: 27,170 |
||||
12.10.2016, 17:09 |
4 |
|||
0 |
Не могу понять, почему у меня есть эти сообщения об ошибках. Я новичок в C ++.
payroll.cpp: In function `void fGross()':
payroll.cpp:57: error: assignment of function `double round(double)'
payroll.cpp:57: error: cannot convert `double' to `double ()(double)
throw ()' in assignment
payroll.cpp:59: error: cannot convert `double ()(double) throw ()'
to `double' in assignment
payroll.cpp: In function `void fSoc()':
payroll.cpp:65: error: assignment of function `double round(double)'
payroll.cpp:65: error: cannot convert `double' to `double ()(double)
throw ()' in assignment
payroll.cpp:67: error: cannot convert `double ()(double) throw ()'
to `double' in assignment
payroll.cpp: In function `void fFed()':
payroll.cpp:73: error: assignment of function `double round(double)'
payroll.cpp:73: error: cannot convert `double' to `double ()(double)
throw ()' in assignment
payroll.cpp:75: error: cannot convert `double ()(double) throw ()'
to `double' in assignment
payroll.cpp: In function `void fSt()':
payroll.cpp:82: error: assignment of function `double round(double)'
payroll.cpp:82: error: cannot convert `double' to `double ()(double)
throw ()' in assignment
payroll.cpp:84: error: cannot convert `double ()(double) throw ()'
to `double' in assignment
payroll.cpp: In function `void fround()':
payroll.cpp:110: error: invalid operands of types `double ()(double)
throw ()' and `double' to binary `operator+'
Это мой код:
#include <iostream>
#include <climits>
#include <cmath>
using namespace std;
double hours, gross, socSec, fedTax, stTax, ins, net;
double const rate = 16.78;
double unin = 10.00;
char d = '$';
void fGross();
void fSoc();
void fFed();
void fSt();
void fUnin();
void fIns();
void fNet();
void fround();int main (void)
{
cout <<"nnttWelcome to the Payroll Program!!!nnn";
cout <<"How many hours did you work this week?t";
cin >> hours;
cout <<"How many children do you have?";
cin >> ins;
fGross();
fSoc();
fFed();
fSt();
fUnin();
fNet ();
cout <<"Payroll Stub:nnt"<<"Hours:t" << hours
<<"ntRate:t" << rate <<"16.78 $/hrnt"<<"Gross:t" << d << gross
<<"nntSocSec:t" << d << socSec
<<"ntFedTax:t" << d << fedTax
<<"ntStTax:t" << d << stTax
<<"ntUnion:t" << d << unin;
fIns();
cout <<"ntNet:t" << net <<"nnThank you for using the PP!!"<<"nnEndeavor to have a StarTrek-esque day!";
return 0;
}void fGross()
{
round = rate * hours;
fround();
gross = round;
return;
}
void fSoc()
{
round = gross * .06;
fround();
socSec = round;
return;
}
void fFed()
{
round = gross * .14;
fround();
fedTax = round;
return;
}
void fSt()
{
round = gross * .05;
fround();
stTax = round;
return;
}
void fIns()
{
if (ins >= 3)
{
ins = 35.00;
cout << "ntIns:t" << d << ins;
}
else
{
ins = 0.00;
}
return;
}
void fNet()
{
net = gross - socSec - fedTax - stTax - unin - ins;
return;
}
void fround()
{
round = floor((round + .05) * 100);
return;
}
-2
Решение
Существует стандартная библиотечная функция с именем round
, объявлено в <cmath>
, Ваш код ожидает глобальный переменная названный round
, который вы, кажется, забыли объявить, поэтому все виды использования round
в fGross
, fSoc
и т. д. решить функцию. Вы не можете ничего присвоить имени функции, и вы не можете назначить указатель на функцию (что вы и получаете, когда используете имя функции в правой части присваивания) с плавающей точкой переменная. Отсюда все запутанные ошибки.
Для того, чтобы программа работала, вам нужно изменить имя переменной round
; если вы просто добавите отсутствующее объявление, вы получите еще одну ошибку,
test.cc:10:12: error: ‘double round’ redeclared as different kind of symbol
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:326:1: note:
previous declaration ‘double round(double)’
… который, по крайней мере, дает вам больше понятия, в чем проблема.
Есть много из других проблем с этим кодом, из которых я укажу только самые важные три:
- Все
f
-функции должны принимать аргументы и возвращать значение; все глобальные переменные должны быть удалены. (Я подозреваю, что это почти буквальный перевод некоторого COBOL, так что, надеюсь, это следующий рефакторинг, который вы планируете сделать, но я все равно должен указать на это.) - Расчеты на деньги должен быть сделано с помощью фиксированная точка арифметика, чтобы избежать проблем округления и недостаточного заполнения; самая простая вещь, которая будет работать достаточно хорошо для такой программы, — это масштабировать все до целого числа центов, а затем использовать
int64_t
переменные; в вычислениях, включающих проценты, составленные за многие годы или аналогичные, вы можете вместо этого захотеть масштабировать до сотых или тысячных процента. using namespace std
это плохая практика и вызовет больше проблем того типа, с которым вы споткнулись. Написатьusing std::foo;
для каждого фу вам нужно.
1
Другие решения
Других решений пока нет …
Если вы хотите сохранить распределение двумерного массива,
new double [3][4]
Есть два способа обратиться к этому фрагменту памяти:
1.,
double* pvalue = NULL;
pvalue = (double*)new double [3][4];
И 2.,
double (* parray)[4] = NULL;
parray = new double [3][4];
Если вы хотите сохранить переменную указатель на указатель, то есть double** ppvalue, тогда,
double** ppvalue = NULL;
ppvalue = new double*[3]; (a)
for(int i =0; i<3; i++)
ppvalue[i]=new double[4]; (b)
В основном вам нужно выделить память для массива указателей (a) и заполнить эти указатели конкретными адресами.
Код, который вы разместили
double** pvalue = NULL; // Pointer initialized with null
pvalue = new double [3][4]; // Allocate memory for a 3x4 array
Не работает, потому что он не может вычесть смещение pvalue, хотя выглядит очень красиво и ясно.
Я также вставляю полный тестовый код, чтобы вы могли поиграть:
#include <stdio.h>
int main() {
double* pvalue = NULL;
pvalue = (double*)new double [3][4];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
*(pvalue+i*4+j) = (double)i*(double)j;
printf("%fn", *(pvalue+i*4+j));
}
}
double (* parray)[4] = NULL;
parray = new double [3][4];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
parray[i][j] = (double)i*(double)j;
printf("%fn", parray[i][j]);
}
}
double** ppvalue = NULL;
ppvalue = new double*[3];
for(int i =0; i<3; i++)
ppvalue[i]=new double[4];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
ppvalue[i][j] = (double)i*(double)j;
printf("%fn", ppvalue[i][j]);
}
}
}
posted 5 years ago
-
Number of slices to send:
Optional ‘thank-you’ note:
Hello all, today I am writing an array program, and here I am attempting to take the input of a user to get the number of assignments,
and use the number of assignments to create a method that calculates the value of each assignment, and stores it in an array.
However, it is not working too well.
line 23 I receive the error
«Type mismatch: cannot convert from double to double[]»
as well as on the i line 23
«Syntax error on token «i», delete this token»
any ideas why this might be?
author & internet detective
Posts: 41506
posted 5 years ago
-
Number of slices to send:
Optional ‘thank-you’ note:
This is invalid:
You can create a double as
Or a double array as:
Or assign to an element of an existing array as:
Your code tries to combine these which isn’t allowed.
kennith stomps
Ranch Hand
Posts: 274
posted 5 years ago
-
Number of slices to send:
Optional ‘thank-you’ note:
I have gotten a bit farther, here is where I am at, now receiving an error code on both lines 32 and 44
«pointsEarned cannot be resolved to a variable»
«pointsMax cannot be resolved to a variable»
I have clearly initialized these on lines 29 band 41 so I am not sure what the deal is
posted 5 years ago
-
Number of slices to send:
Optional ‘thank-you’ note:
kennith stomps wrote:I have gotten a bit farther, here is where I am at, now receiving an error code on both lines 32 and 44
«pointsEarned cannot be resolved to a variable»
«pointsMax cannot be resolved to a variable»I have clearly initialized these on lines 29 band 41 so I am not sure what the deal is
You’ve declared those variables inside for loop, and trying to return them outside for loop. Those variables have gone out of scope post for loop block.
Please declare and initialise them at the start of methods to keep them in scope.
-Ankur
Yet another average guy.
kennith stomps
Ranch Hand
Posts: 274
posted 5 years ago
-
Number of slices to send:
Optional ‘thank-you’ note:
Okay, now I am totally lost, I am supposed to store the values of points earned as well as points max into one array called pointsArr, how do I do this??? Line 35 I know is wrong, however that is the closest guess I could come to on how returning two arrays and combining into 1 multi dimensional array would be done.
After I combine the points Earned and points max, I must then add all of them together, which is being started on line 53, however I have not the slightest clue on what to do next
posted 5 years ago
-
Number of slices to send:
Optional ‘thank-you’ note:
I believe the issue has to do with your method. The return type of your method should be a double array. I do not see any return statement. Try changing the method to what is below