You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

代码其他潜在问题修复建议

你的代码还存在多处会触发运行时异常的问题,建议同步修改:

  1. 你定义的char *nam是未初始化的野指针,直接传入scanf会导致内存访问越界,建议改为长度足够的栈字符数组,同时去掉scanf参数的取地址符&,并增加输入长度限制避免缓冲区溢出:
    char nam[256] = {0};
    scanf("%255s", nam);
    
  2. game_loop函数声明了int类型返回值,函数结束前需要补充return语句返回整数,否则会触发编译警告/错误。
  3. 头文件game.h++建议补充头文件防护,避免重复包含报错,可在头文件最开头添加#pragma once,或者使用标准的ifndef防护逻辑。
  4. 如果你希望保留参数传值设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:15:03