C++调用StringUtil类createTrimmedString方法报无对象错误如何解决
错误产生原因
- 核心原因:
createTrimmedString是StringUtil类的普通非静态成员函数,普通成员函数必须通过类的实例对象调用,你当前直接用StringUtil::createTrimmedString的类名直接调用方式,没有关联实例对象,触发编译报错。 - 额外隐藏问题:该函数声明的返回值为
void,但你代码中尝试将函数调用结果赋值给vehicleRegA、vehicleRegB变量,就算解决调用问题也会触发二次编译错误。 - 补充语法问题:你提供的
StringUtil.h末尾多了一个多余的右大括号,属于语法错误需要删除。
修复方案
推荐两种可选方案,按需选择即可:
方案1:将工具方法改为静态成员函数(更推荐,适合工具类通用方法)
修改StringUtil.h中的函数声明:
- 给
createTrimmedString添加static关键字声明为静态成员 - 将返回值类型从
void改为std::string,匹配你赋值的需求
修改后的声明代码:
class StringUtil { public: StringUtil() {}; ~StringUtil(); // 修改为静态、返回string的方法 static std::string createTrimmedString(const std::string& vinLine); private: };
- 同步修改
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
相关产品推荐
相关产品推荐

