使用 strcpy_s 时出现一些错误,无法弄清楚我做错了什么。
编码:
播放器.hpp:
string name;
Player(string);
播放器.cpp:
Player::Player(string newName)
{
strcpy_s(name, name.size(), newName);//error is here
health = 20;
}
错误:
- 函数调用中的参数过多
- 没有重载函数“strcpy_s”的实例与参数列表匹配
你不能strcpy_s
用来复制std::string
。实际上,您只需要这样做:
Player::Player(string newName) {
name = newName;
health = 20;
}
更好的是,您可以使用构造函数初始化列表:
Player::Player(string newName) : name(newName), health(20) {}
作为参考,这里有std::string类的详细描述。
此 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* 参数 - 不适用于字符串数据类型)