《Essential C++》习题1.8编译出现expected ","错误求助
问题原因
- 直接触发
expected a ","报错的原因是数组语法使用错误:C中声明数组、访问数组元素都需要使用方括号[],你代码中定义usr_msgs数组时错误使用了圆括号()写成static const char* usr_msgs( rsp_cnt ),后续返回时也错误用圆括号访问元素usr_msgs(num_tries),不符合C语法要求。 - 第二个语法错误是嵌套定义函数:C++标准不支持在函数内部定义另一个函数,你将
msg_to_usr函数定义在main函数内部,编译时也会触发语法错误。 - 代码中存在两处拼写错误:字符串里的
male应为make,quess应为guess,不影响编译但会导致输出内容错误。 - 额外问题:当前
main函数没有任何调用逻辑、也没有返回值,修复语法问题后也无法正常运行输出结果。
修复方案
- 将
msg_to_usr函数的定义移动到main函数外部 - 把所有数组相关的圆括号替换为方括号
- 修正拼写错误
- 在
main函数中补充测试调用逻辑,添加返回值
修复后完整代码
#include <iostream> #include <string> using namespace std; const char* msg_to_usr(int num_tries) { const int rsp_cnt = 5; static const char* usr_msgs[rsp_cnt] = { "Go on,make a guess.", "Oops! Nice guess but not quite it.", "Hmm.Sorry Wrong again", "Ah, this is harder than it looks,no?", "It must be getting pretty frustrating by now!" }; if (num_tries < 0) num_tries = 0; else if (num_tries >= rsp_cnt) num_tries = rsp_cnt - 1; return usr_msgs[num_tries]; } int main() { // 测试调用示例 cout << msg_to_usr(2) << endl; return 0; }
内容的提问来源于stack exchange,提问作者Hau Teck Seng
相关产品推荐
相关产品推荐

