重要:我使用的是使用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> &' ...
答案 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';
}
}
};