Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 传递字符串&;分类方法C++;_C++ - Fatal编程技术网

C++ 传递字符串&;分类方法C++;

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

试图调用我的StringUtil类来访问createTrimmedString方法,并传递字符串引用string&

--- 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
a
namespace
而不是一个类如何?我打算通过使用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
        {
           // 
        }

}