C++调用类成员函数rps提示identifier undefined错误如何解决
问题原因&修复方案
你遇到的报错由两个错误共同导致:
- 类成员访问权限错误:你在头文件中将
rps函数定义在了private私有块下,类外部的main函数没有权限调用私有成员 - 类成员函数调用方式错误:非静态类成员函数不能直接调用,必须通过类的实例对象触发调用,你直接写
rps(p1,p2)相当于寻找全局作用域下的同名函数,而你并没有定义这个全局函数,因此报标识符未定义。
第一步:修正头文件声明
将rps函数移到public公共块下,允许外部调用:
#pragma once #include <string> class Game { public: std::string rps(std::string p1, std::string p2); private: // 其余私有成员放在此处 };
如果你的rps函数不需要访问Game类的任何成员变量,也可以将它声明为静态成员,调用时无需创建实例:
#pragma once #include <string> class Game { public: static std::string rps(std::string p1, std::string p2); private: // 其余私有成员放在此处 };
第二步:修正调用代码
如果用普通成员函数方式,先创建Game类实例再调用:
Game myGame; if (myGame.rps(p1, p2) == "tie") { cout << "Same Move, Try Again!" << "\n" << "\n"; }
如果用静态成员函数方式,直接通过类名调用:
if (Game::rps(p1, p2) == "tie") { cout << "Same Move, Try Again!" << "\n" << "\n"; }
额外注意
你当前实现的rps函数没有兜底返回逻辑,如果传入的参数不是rock/paper/scissor三个有效值,函数执行到末尾没有返回值,会触发未定义行为,建议在函数最后增加默认返回逻辑,比如return "invalid";做异常处理。
内容的提问来源于stack exchange,提问作者Nurved
相关产品推荐
相关产品推荐

