使用strcpy_s时出现了一些错误,无法弄清楚我做错了什么。
代码:
Player.hpp:
string name;
Player(string);
Player.cpp:
Player::Player(string newName)
{
strcpy_s(name, name.size(), newName);//error is here
health = 20;
}
错误:
答案 0 :(得分:4)
您无法使用strcpy_s
复制std::string
。实际上,你只需要这样做:
Player::Player(string newName) {
name = newName;
health = 20;
}
更好的是,您可以使用constructor initialization list:
Player::Player(string newName) : name(newName), health(20) {}
作为参考,您可以在此处详细了解std::string类。
答案 1 :(得分:2)
此URL指出C ++版本仅使用模板重载 函数(2个参数不是3):
http://msdn.microsoft.com/en-us/library/td1esda9%28v=vs.80%29.aspx
模板 errno_t strcpy_s( char(& strDestination)[size], const char * strSource ); //仅限C ++
根据此网址:
在C ++中,使用这些函数可以通过模板重载简化;重载可以自动推断缓冲区长度(无需指定大小参数),并且它们可以自动用较新的,安全的对应物替换旧的非安全功能。有关更多信息,请参阅安全模板重载。
(如原型中所述,此函数用于char *参数 - 不适用于字符串数据类型)