C++ 传递字符串&;分类方法C++;
试图调用我的StringUtil类来访问createTrimmedString方法,并传递字符串引用string&C++ 传递字符串&;分类方法C++;,c++,C++,试图调用我的StringUtil类来访问createTrimmedString方法,并传递字符串引用string& --- error: cannot call member function ‘void StringUtil::createTrimmedString(const string&)’ without object vehicleRegA = StringUtil::createTrimmedString(vinLine.substr(vehicleDataL
--- error: cannot call member function ‘void StringUtil::createTrimmedString(const string&)’ without object
vehicleRegA = StringUtil::createTrimmedString(vinLine.substr(vehicleDataLen+201,60));
^
joinNcfClu.cpp:151:81: error: cannot call member function ‘void StringUtil::createTrimmedString(const string&)’ without object
vehicleRegB = StringUtil::createTrimmedString(vinLine.substr(vehicleDataLen+261,8));
^
#包括
#包括“Inventory.h”
#包括
#包括“StringUtil.h”
无效库存::GetVehiclerResults(ifstream*infle、stringList和vehicleList、,
车辆字符串类型、字符串列表和杂项列表、字符串和VIN)
{
int特性_max;
国际图伦;
int vehicleDataLen;
//弦;
字符串prevSeqNum;
如果(车辆类型=“A”)
{
特征_max=14;
Len=36;
vehicleDataLen=特征最大值*t长度;
如果(vehicleList.size()=0)
{
claSeqNum=vinLine.substr(车辆数据,7);
VehiclerRega=StringUtil::createTrimmedString(vinLine.substr(vehicleDataLen+57,70));
vehicleRegB=StringUtil::createTrimmedString(vinLine.substr(vehicleDataLen+261,8));
vehicleKey=vinLine.substr(vehicleDataLen+269,9);
实际车辆=vinLine.substr(车辆数据+289,16);
}
}
其他的
{
//
}
}
//StringUtil.h
#包括
使用名称空间std;
#包括
类型定义列表车辆列表;
类StringUtil
{
公众:
StringUtil()
{
};
~StringUtil();
void createTrimmedString(常数std::string和vinLine);
私人:
}
};
因为您正在使用的函数需要类的实例,所以您需要:
StringUtil string_util;
vehicleRegA = string_util.createTrimmedString(vinLine.substr(vehicleDataLen+57,70));
vehicleRegB = string_util.createTrimmedString(vinLine.substr(vehicleDataLen+261,8));
为了得到你在建的东西
也就是说,由于函数可能不需要StringUtil
类中的任何数据,因此我建议将函数设置为StringUtil
类中的静态函数:
class StringUtil
{
public:
StringUtil() {};
~StringUtil();
// just add static to the front here
static void createTrimmedString(const std::string& vinLine);
private:
}
};
或者,由于该函数似乎是该类的唯一存在对象,您可以将其设置为命名空间内的自由函数:
namespace StringUtil {
void createTrimmedString(const std::string& vinLine);
}
这两个都不需要更改对函数的调用。
在我的StringUtil类中,我更改了静态字符串createTrimmedString(string和vinLine),但是我得到了不同的错误--joinnclu.cpp:150:81:错误:调用'StringUtil::createTrimmedString(std::basic_string)时没有匹配的函数'custQB=StringUtil::createTrimmedString(vinLine.substr(vehicleDataLen+201,60));^joinnclu.cpp:150:81:注意:候选项是:在joinNcfClu.cpp:4:0:StringUtil.h:34:19:注意:静态std::string StringUtil::createTrimmedString(std::string&)静态string createTrimmedString(string&cluLine);^StringUtil.h:34:19:注意:参数1从'std::basic_string'到'std::string&{aka std::basic_string&}'joinCfclu.cpp:151:81:错误:调用'StringUtil::createTrimmedString(std::basic_string)'custDOB=StringUtil::createTrimmedString(cluLine.substr(cluDataLen+261,8))没有匹配的函数^代码>
//StringUtil.h
#include <string>
using namespace std;
#include <list>
typedef list<string > vehicleList;
class StringUtil
{
public:
StringUtil()
{
};
~StringUtil();
static string createTrimmedString(string& vinLine);
private:
}
```````````````````````````````````````````````````````````````````````
#include <iostream>
#include "Inventory.h"
#include <time.h>
#include "StringUtil.h"
void Inventory::getVehicleResults(ifstream * inFile, stringList& vehicleList,
string typeOfVehicle, stringList& miscList, string& vinLine)
{
int features_max;
int t_Len;
int vehicleDataLen;
//StringUtil S;
string prevSeqNum;
if ( typeOfVehicle == "A" )
{
features_max = 14;
Len = 36;
vehicleDataLen = features_max * t_Len;
if ( vehicleList.size() == 0 )
{
claSeqNum = vinLine.substr(vehicleDataLen,7);
vehicleRegA = StringUtil::createTrimmedString(vinLine.substr(vehicleDataLen+57,70));
vehicleRegB = StringUtil::createTrimmedString(vinLine.substr(vehicleDataLen+261,8));
vehicleKey = vinLine.substr(vehicleDataLen+269,9);
actual_veh = vinLine.substr(vehicleDataLen+289,16);
}
}
else
{
//
}
}
//StringUtil.h
#包括
使用名称空间std;
#包括
类型定义列表车辆列表;
类StringUtil
{
公众:
StringUtil()
{
};
~StringUtil();
静态字符串createTrimmedString(字符串和vinLine);
私人:
}
```````````````````````````````````````````````````````````````````````
#包括
#包括“Inventory.h”
#包括
#包括“StringUtil.h”
无效库存::GetVehiclerResults(ifstream*infle、stringList和vehicleList、,
车辆字符串类型、字符串列表和杂项列表、字符串和VIN)
{
int特性_max;
国际图伦;
int vehicleDataLen;
//弦;
字符串prevSeqNum;
如果(车辆类型=“A”)
{
特征_max=14;
Len=36;
vehicleDataLen=特征最大值*t长度;
如果(vehicleList.size()=0)
{
claSeqNum=乙烯线.子项(车辆催化剂,7);
VehiclerRega=StringUtil::createTrimmedString(vinLine.substr(vehicleDataLen+57,70));
vehicleRegB=StringUtil::createTrimmedString(vinLine.substr(vehicleDataLen+261,8));
vehicleKey=vinLine.substr(vehicleDataLen+269,9);
实际车辆=vinLine.substr(车辆数据+289,16);
}
}
其他的
{
//
}
}
问题与传递字符串无关&
,而与createTrimmedString
不是StringUtil
类的静态方法这一事实有关。一旦修复此问题,您可能会遇到一个问题,createTrimmedString
通过const
引用获取其参数并返回void
,因此,我不确定您希望输出到哪里。正如@NathanPierson所说,但是如果只具有静态函数,那么将StringUtil
anamespace
而不是一个类如何?我打算通过使用void类方法return type来修改StringUtil.cpp.Added static to StringUtil.h,static string createTrimmedString(string&cluLine);,获取不同的错误StringUtil.h:34:19:注意:静态std::string StringUtil::createTrimmedString(std::string&)静态string createTrimmedString(string&cluLine);^StringUtil.h:参数1从'std::basic_string'到'std::string&{aka std::basic_string&}的转换未知错误:调用'StringUtil::createTrimmedString(std::basic_string)'custDOB=StringUtil::createTrimmedString(cluLine.substr(cluDataLen+261,8)),没有匹配的函数;当我将其设置为静态时,我得到了不同的错误StringUtil.h:34:19:note:static std::string StringUtil::createTrimmedString(std::string&)static string createTrimmedString(string&vinLine);^StringUtil.h:34:19:注意:参数1从'std::basic_string'到'std::string&{aka std::basic_string&}'JoinCfclu.cpp:15没有已知的转换
//StringUtil.h
#include <string>
using namespace std;
#include <list>
typedef list<string > vehicleList;
class StringUtil
{
public:
StringUtil()
{
};
~StringUtil();
static string createTrimmedString(string& vinLine);
private:
}
```````````````````````````````````````````````````````````````````````
#include <iostream>
#include "Inventory.h"
#include <time.h>
#include "StringUtil.h"
void Inventory::getVehicleResults(ifstream * inFile, stringList& vehicleList,
string typeOfVehicle, stringList& miscList, string& vinLine)
{
int features_max;
int t_Len;
int vehicleDataLen;
//StringUtil S;
string prevSeqNum;
if ( typeOfVehicle == "A" )
{
features_max = 14;
Len = 36;
vehicleDataLen = features_max * t_Len;
if ( vehicleList.size() == 0 )
{
claSeqNum = vinLine.substr(vehicleDataLen,7);
vehicleRegA = StringUtil::createTrimmedString(vinLine.substr(vehicleDataLen+57,70));
vehicleRegB = StringUtil::createTrimmedString(vinLine.substr(vehicleDataLen+261,8));
vehicleKey = vinLine.substr(vehicleDataLen+269,9);
actual_veh = vinLine.substr(vehicleDataLen+289,16);
}
}
else
{
//
}
}