我不明白编译器错误
I don't understand the compiler errors
这是一项家庭作业,所以我不希望您完全编写缺少的代码。但我需要努力推动,因为我是新手,需要熟悉我在做什么。
这是在 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 参数才能写出到指定格式的输出流。但是,您继续只给它一个 float 参数。我不能确切地告诉你如何解决这个问题,因为我不知道格式字符串的意图,也不知道你应该打印什么。我可以告诉你,你要么需要更改你的格式字符串,这样它只需要一个浮点数而不需要字符串,要么向你的 PrintSummaryReport()
函数添加更多参数,这样你就可以给 fprintf()
你的格式字符串告诉它它应该期待。
在第 51 行,编译器告诉您使用了间接运算符 (*),但您之前没有类型声明,因此更改为 float * p。
第 173 行告诉您没有为字符串 REPLNEFORMT3 提供足够的格式参数,它期望 3 但您只给了它一个。
这是一项家庭作业,所以我不希望您完全编写缺少的代码。但我需要努力推动,因为我是新手,需要熟悉我在做什么。
这是在 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 参数才能写出到指定格式的输出流。但是,您继续只给它一个 float 参数。我不能确切地告诉你如何解决这个问题,因为我不知道格式字符串的意图,也不知道你应该打印什么。我可以告诉你,你要么需要更改你的格式字符串,这样它只需要一个浮点数而不需要字符串,要么向你的 PrintSummaryReport()
函数添加更多参数,这样你就可以给 fprintf()
你的格式字符串告诉它它应该期待。
在第 51 行,编译器告诉您使用了间接运算符 (*),但您之前没有类型声明,因此更改为 float * p。
第 173 行告诉您没有为字符串 REPLNEFORMT3 提供足够的格式参数,它期望 3 但您只给了它一个。