Я не понимаю ошибки компилятора

Это домашнее задание, поэтому я не хочу, чтобы вы полностью написали недостающий код. Но мне нужен довольно сильный толчок, потому что я новичок и мне нужно ознакомиться с тем, что я делаю.

Этот формат используется в 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, я люблю тебя!

1

Решение

Итак, вот почему вы получаете свои ошибки.

Для первой и второй ошибки ваш *float должно быть float *, дела *float ничего не значит для компилятора и поэтому выдает ошибку. дела float * с другой стороны, сообщает компилятору, что вы хотите указатель на число с плавающей точкой, и это совершенно правильно.

Что касается третьей и четвертой ошибок, вы допустили ошибку при включении типов в вызов функции. Не делай этого! Это генерирует ошибку. Просто удалите типы так, чтобы это выглядело как AddDetailToAccumulators(totpayrate, p); и это исправит ваши ошибки, если допустить, что totpayrate и p являются указателями на числа с плавающей точкой, определенные в вашей основной функции.

Для пятой ошибки вы пытаетесь добавить два указателя вместе. Это не работает! Я предполагаю, что вы пытаетесь использовать указанные значения, поэтому вам нужно добавить оператор разыменования (*), чтобы он выглядел следующим образом: *totpayrate = *p + *totpayrate;,

Для шестой ошибки и предупреждений, ваша строка формата " %-7s%7f%4f\n" говорит fprintf() что он должен ожидать строковый аргумент, а затем два аргумента float / double, чтобы иметь возможность выписать в выходной поток в указанном формате. Однако вы продолжаете указывать только один аргумент с плавающей точкой. Я не могу точно сказать вам, как это исправить, так как я не знаю намерения строки формата или то, что вы должны печатать. Я могу вам сказать, что вам нужно либо изменить строку формата, чтобы ей требовалось только одно значение с плавающей точкой, но не строку, или добавить дополнительные параметры в ваш файл. PrintSummaryReport() функция, чтобы вы могли дать fprintf() что ваша строка формата говорит о том, что она должна ожидать.

4

Другие решения

В строке 51 компилятор сообщает вам, что используется оператор косвенного обращения (*), но у вас нет объявления типа перед ним, поэтому перейдите на float * p.

В строке 173 сообщается, что вы не указали достаточно аргументов формата для строки REPLNEFORMT3, она ожидает 3, но вы дали только один.

0

По вопросам рекламы [email protected]