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

重要说明:我正在使用C ++ 03使用Visual Studio C ++ 2010,因为我在旧的Windows系统上工作,所以无法使用Visual Studio升级到C ++ 11。 另外我使用UNICODE。

我正在自己的函数来parsing命令行的每个参数,但我不能使它的工作,因为types是不同的。 首先我试图传递给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> &' ... 

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

如果你希望char和wchar版本,你可以使用像这样的东西:

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

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

 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'; } } };