C++调用类对象报错:类类型对象无合适operator()如何解决
错误原因与修复方案
你收到的编译错误Call of an object of a class type without appropriate operator()的中文含义为:尝试调用类类型的对象,但该类没有定义匹配的operator()运算符重载。
核心报错原因
- 你在
Hero类中定义的name是std::string类型的公开成员变量,不是成员函数,不能使用myHero->name(nam)这种带括号的调用语法赋值,该语法仅适用于成员函数、或者重载了operator()的类对象。
直接修复方法
直接使用等号对成员变量赋值即可,把报错行改为:
myHero->name = nam;
代码其他潜在问题修复建议
你的代码还存在多处会触发运行时异常的问题,建议同步修改:
- 你定义的
char *nam是未初始化的野指针,直接传入scanf会导致内存访问越界,建议改为长度足够的栈字符数组,同时去掉scanf参数的取地址符&,并增加输入长度限制避免缓冲区溢出:char nam[256] = {0}; scanf("%255s", nam); game_loop函数声明了int类型返回值,函数结束前需要补充return语句返回整数,否则会触发编译警告/错误。- 头文件
game.h++建议补充头文件防护,避免重复包含报错,可在头文件最开头添加#pragma once,或者使用标准的ifndef防护逻辑。 - 如果你希望保留
参数传值设置name的调用形式,可以在Hero类中新增对应的成员函数:
调用时改为class Hero { public: std::string name; // 新增设置name的成员函数 void set_name(const std::string& n) { name = n; } // 其他原有成员不变 int race; int classe; int level = 0; int hp = 10; int mana = 5; };myHero->set_name(nam);即可。
内容的提问来源于stack exchange,提问作者Tsirsuna
相关产品推荐
相关产品推荐

