Это домашнее задание, поэтому я не хочу, чтобы вы полностью написали недостающий код. Но мне нужен довольно сильный толчок, потому что я новичок и мне нужно ознакомиться с тем, что я делаю.
Этот формат используется в AddDetailsblablablafunction ()
#define REPLNEFORMT3 " %-7s%7f%4f\n"
Линия 51 является прототипом функции
51 void AddDetailToAccumulators(float *totpayrate, *float p);/
Строка 85 находится в главном модуле и вызывает функцию AddDetailToAccumulators ()
85 AddDetailToAccumulators(float *totpayrate, *float p);
171 void AddDetailToAccumulators(float *totpayrate, float *p)//3.6
172 {
173 totpayrate = p + totpayrate;
174 }
175 void PrintSummaryReport(float totpayrate, FILE * reportfile)/*, float totreg, float *totovt, float totg, float totfed,
176 float totstate, float totssi, float totnet,
177 int numemps, FILE *reportfile)//3.7*/
178
179 {
180 fprintf(stdout,REPLNEFORMT3,totpayrate);
181 fprintf(reportfile,REPLNEFORMT3,totpayrate);
182}
Ошибки компилятора перечислены следующим образом:
g++ -Wall -o "main" "main.cpp" (in directory: /media/dylan07/541C-D0D8)
main.cpp:51:49: error: expected identifier before ‘*’ token
void AddDetailToAccumulators(float *totpayrate, *float p);//, //float *totp, float reg, float *totreg,
^
main.cpp:51:50: error: expected ‘,’ or ‘...’ before ‘float’
void AddDetailToAccumulators(float *totpayrate, *float p);//, //float *totp, float reg, float *totreg,
^
main.cpp: In function ‘int main()’:
main.cpp:85:29: error: expected primary-expression before ‘float’
AddDetailToAccumulators(float *totpayrate, *float p);
^
main.cpp:85:49: error: expected primary-expression before ‘float’
AddDetailToAccumulators(float *totpayrate, *float p);
^
main.cpp: In function ‘void AddDetailToAccumulators(float*, float*)’:
main.cpp:173:19: error: invalid operands of types ‘float*’ and ‘float*’ to binary ‘operator+’
totpayrate = p + totpayrate;
^
main.cpp: In function ‘void PrintSummaryReport(float, FILE*)’:
main.cpp:180:40: warning: format ‘%s’ expects argument of type ‘char*’, but argument 3 has type ‘double’ [-Wformat=]
fprintf(stdout,REPLNEFORMT3,totpayrate);
^
main.cpp:180:40: warning: format ‘%f’ expects a matching ‘double’ argument [-Wformat=]
main.cpp:180:40: warning: format ‘%f’ expects a matching ‘double’ argument [-Wformat=]
main.cpp:181:44: warning: format ‘%s’ expects argument of type ‘char*’, but argument 3 has type ‘double’ [-Wformat=]
fprintf(reportfile,REPLNEFORMT3,totpayrate);
^
main.cpp:181:44: warning: format ‘%f’ expects a matching ‘double’ argument [-Wformat=]
main.cpp:181:44: warning: format ‘%f’ expects a matching ‘double’ argument [-Wformat=]
Compilation failed.
Я надеюсь, что мое форматирование хорошо. 🙂
РЕДАКТИРОВАТЬ: BurningLights, я люблю тебя!
Итак, вот почему вы получаете свои ошибки.
Для первой и второй ошибки ваш *float
должно быть float *
, дела *float
ничего не значит для компилятора и поэтому выдает ошибку. дела float *
с другой стороны, сообщает компилятору, что вы хотите указатель на число с плавающей точкой, и это совершенно правильно.
Что касается третьей и четвертой ошибок, вы допустили ошибку при включении типов в вызов функции. Не делай этого! Это генерирует ошибку. Просто удалите типы так, чтобы это выглядело как AddDetailToAccumulators(totpayrate, p);
и это исправит ваши ошибки, если допустить, что totpayrate и p являются указателями на числа с плавающей точкой, определенные в вашей основной функции.
Для пятой ошибки вы пытаетесь добавить два указателя вместе. Это не работает! Я предполагаю, что вы пытаетесь использовать указанные значения, поэтому вам нужно добавить оператор разыменования (*), чтобы он выглядел следующим образом: *totpayrate = *p + *totpayrate;
,
Для шестой ошибки и предупреждений, ваша строка формата " %-7s%7f%4f\n"
говорит fprintf()
что он должен ожидать строковый аргумент, а затем два аргумента float / double, чтобы иметь возможность выписать в выходной поток в указанном формате. Однако вы продолжаете указывать только один аргумент с плавающей точкой. Я не могу точно сказать вам, как это исправить, так как я не знаю намерения строки формата или то, что вы должны печатать. Я могу вам сказать, что вам нужно либо изменить строку формата, чтобы ей требовалось только одно значение с плавающей точкой, но не строку, или добавить дополнительные параметры в ваш файл. PrintSummaryReport()
функция, чтобы вы могли дать fprintf()
что ваша строка формата говорит о том, что она должна ожидать.
В строке 51 компилятор сообщает вам, что используется оператор косвенного обращения (*), но у вас нет объявления типа перед ним, поэтому перейдите на float * p.
В строке 173 сообщается, что вы не указали достаточно аргументов формата для строки REPLNEFORMT3, она ожидает 3, но вы дали только один.