最近在學習課程的時候發現一個很困惑的問題,上代碼
class DataHeader;
class LoginResult:public DataHeader;
typedef std::shared_ptr<DataHeader> DataHeaerPtr;
//原型
void addSendTask(ClientSocketPtr& pClient, DataHeaderPtr& header)
//未報錯調用
DataHeaderPtr ret = std::make_shared<LoginResult>();
pCellServer->addSendTask(pClient, ret);
//報錯調用
auto ret = std::make_shared<LoginResult>();
pCellServer->addSendTask(pClient, (DataHeaderPtr)ret);
#錯誤代碼:(DataHeaderPtr)ret
錯誤類型:
非常量引用的初始值必須爲左值。
測試環境爲vc2017。
疑問:
學習的電子課件中爲vc2013,這裏並不會報錯。在vc2017導入課件中的源碼這裏也不會報錯。這是什麼原因????????????