2012-07-13 117 views
0

我使用strcpy_s時發現一些錯誤,無法弄清楚我做錯了什麼。C++ - 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

不能使用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類的詳細說明。

+0

哦!所以你只需要在使用char *時使用strcpy? – 2012-07-13 22:01:32

+0

@JeanFinley正是: – betabandido 2012-07-13 22:03:19

+0

酷!謝謝=) – 2012-07-13 22:04:21

2

此URL指出C++版本僅使用模板重載 功能(2個參數不3):

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

模板 errno_t strcpy_s( 炭(& strDestination)[尺寸], 常量char * strSource ); // C++只是

根據該URL:

在C++中,使用這些功能是由模板重載簡化;重載可以自動推斷緩衝區長度(無需指定大小參數),並且它們可以自動用較新的安全對應項替換舊的非安全功能。有關更多信息,請參閱安全模板過載。

(如原型中所述,此函數用於char *參數 - 不適用於字符串數據類型)