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

C++调用StringUtil类createTrimmedString方法报无对象错误如何解决

错误产生原因
  • 核心原因:createTrimmedString是StringUtil类的普通非静态成员函数,普通成员函数必须通过类的实例对象调用,你当前直接用StringUtil::createTrimmedString的类名直接调用方式,没有关联实例对象,触发编译报错。
  • 额外隐藏问题:该函数声明的返回值为void,但你代码中尝试将函数调用结果赋值给vehicleRegA、vehicleRegB变量,就算解决调用问题也会触发二次编译错误。
  • 补充语法问题:你提供的StringUtil.h末尾多了一个多余的右大括号,属于语法错误需要删除。
修复方案

推荐两种可选方案,按需选择即可:

方案1:将工具方法改为静态成员函数(更推荐,适合工具类通用方法)

修改StringUtil.h中的函数声明:

  1. 给createTrimmedString添加static关键字声明为静态成员
  2. 将返回值类型从void改为std::string,匹配你赋值的需求
    修改后的声明代码:
class StringUtil
{
public:
   StringUtil() {};
   ~StringUtil();
   // 修改为静态、返回string的方法
   static std::string createTrimmedString(const std::string& vinLine);
private:
};
  1. 同步修改createTrimmedString的实现代码,调整返回值类型,最后return处理后的裁剪字符串即可。
    修改后不需要创建类实例,原有的StringUtil::createTrimmedString调用方式可以直接正常使用。

方案2:创建类实例后调用成员函数

如果不想修改类的定义,可以直接取消业务代码中//StringUtil S;这行的注释,创建StringUtil类的实例对象,然后通过实例调用方法:

StringUtil S;
// 改为通过实例调用
vehicleRegA = S.createTrimmedString(vinLine.substr(vehicleDataLen+57,70));
vehicleRegB = S.createTrimmedString(vinLine.substr(vehicleDataLen+261,8));

注意:该方案同样需要先把createTrimmedString的返回值从void改为std::string,否则无法赋值给字符串变量。

内容的提问来源于stack exchange,提问作者jlb99

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 00:45:08