如何从命令行参数C ++创建std :: string

时间:2014-06-14 10:07:44

标签: c++ windows string

重要:我使用的是使用C ++ 03的Visual Studio C ++ 2010,我无法使用Visual Studio升级到C ++ 11,因为我正在使用旧的Windows系统。我也在使用UNICODE。

我正在处理我自己的函数来解析命令行的每个参数,但我无法使其工作,因为类型不同。首先,我尝试将 a 传递给std :: string构造函数,然后尝试传递 b

MyClass::MyClass(int argc, _TCHAR* argv[]){
    _TCHAR *a;
    char b;
    std::string created;
    for(int i = 0; i < argc; i++)
    {
        a = argv[i];
        b = *argv[i];
        std::string created(a); 
        std::istringstream ss(created);
        std::string token;

        while(std::getline(ss, token, '-')) 
        {
            std::cout << token << '\n';
        }
    }
};

错误

error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &)' : cannot convert parameter 1 from '_TCHAR *' to 'const std::basic_string<_Elem,_Traits,_Ax> &' ...

2 个答案:

答案 0 :(得分:1)

正如Marco A.所说,那不是unicode。正如πάντα-ῥεῖ所说,你需要使用std :: wstring。

如果您同时希望使用char和wchar版本,则可以使用以下内容:

#ifdef _UNICODE
    typedef std::string tstring;
#else
    typedef std::wstring tstring;
#endif

答案 1 :(得分:-1)

我已经解决了这个问题。问题在于主要功能:

int _tmain(int argc, _TCHAR* argv[])

我使用int main(int argc,char * argv [])代替。

现在可行:

MyClass::MyClass(int argc, char* argv[]){
    char *a;
    for(int i = 0; i < argc; i++)
    {
        a = argv[i];
        std::string created(a); 
        std::istringstream ss(created);
        std::string token;

        while(std::getline(ss, token, '-')) 
        {
            std::cout << token << '\n';
        }
    }
};