重要说明:我正在使用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'; } } };