0

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

エラー:

  • 関数呼び出しの引数が多すぎます
  • オーバーロードされた関数 'strcpy_s' のインスタンスが引数リストと一致しません
4

2 に答える 2

4

strcpy_sを使用してコピーすることはできませんstd::string。実際には、次のことを行う必要があります。

Player::Player(string newName) {
    name = newName;
    health = 20;
}

さらに良いことに、コンストラクターの初期化リストを使用できます。

Player::Player(string newName) : name(newName), health(20) {}

参考までに、こちらにstd::stringクラスの詳細な説明があります。

于 2012-07-13T21:59:15.883 に答える
2

この URL は、C++ バージョンがテンプレートのオーバーロードされた関数 (3 ではなく 2 つの引数) のみを使用することを示しています。

http://msdn.microsoft.com/en-us/library/td1esda9%28v=vs.80%29.aspx

template errno_t strcpy_s( char (&strDestination)[サイズ], const char *strSource ); // C++ のみ

この URL によると:

C++ では、テンプレートのオーバーロードによってこれらの関数の使用が簡素化されます。オーバーロードはバッファー長を自動的に推測でき (サイズ引数を指定する必要がなくなります)、古い安全でない関数を新しい安全な対応する関数に自動的に置き換えることができます。詳細については、セキュア テンプレートのオーバーロードを参照してください。

(プロトタイプで述べたように、この関数は char* 引数用であり、文字列データ型用ではありません)

于 2012-07-13T22:01:25.397 に答える