2015-10-22 3 views
1

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

Это formatpiece используется в AddDetailsblablablafunction()

#define REPLNEFORMT3 "  %-7s%7f%4f\n" 

линия 51 является прототипом функции

51 void AddDetailToAccumulators(float *totpayrate, *float p);/ 

Линия 85 В главном mopdule и вызывает 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. 

Надеюсь, что мое форматирование хорошее. :)

EDIT: BurningLights, я люблю тебя!

+0

'#define REPLNEFORMT3"% -7s% 7f% 4f \ n "и' totpayrate = p + totpayrate; 'Что? Это то, чему вас учат? –

+0

«% -7s% 75 \ n» Да, чему учили в классе. но totpayrate = p + totpayrate был мной – GeekyDewd

+0

Измените «* float p» на «float * p» и повторите попытку –

ответ

4

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

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

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

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

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

0

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

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

Смежные вопросы