(при условии, что вы говорите о MFC CArray
, где второй параметр шаблона ARG_TYPE
становится типом параметра для CArray<>::Add
функции-члена).
Аргумент, который вы передаете Add
- &VStatusSrvr::CreateLineSegTotalResp
- не является lvalue. И параметр Add
имеет тип void (VStatusSrvr::*&)()
, который является неконстантной ссылкой на lvalue. В стандартном C ++ нельзя связывать неконстантные ссылки на lvalue с ненулевыми значениями.
В старых версиях Visual Studio это нестандартное поведение допускалось как расширение, включенное по умолчанию. В Visual Studio 2017 это расширение все еще существует, но по умолчанию оно отключено. Отсюда и ошибка.
Если в качестве второго аргумента шаблона для CArray
используется константная ссылка (т. Е. Ссылка на const), она должна работать
CArray< void (VStatusSrvr::*)(), void (VStatusSrvr::*const &)() > m_fnCreateStsRespArr;
...
m_fnCreateStsRespArr.Add( &VStatusSrvr::CreateLineSegTotalResp);
В любом случае, почему вы даже хотите передать указатель на функцию-член по ссылке? Почему бы просто не передать его по значению и не забыть обо всей этой проблеме?
CArray< void (VStatusSrvr::*)(), void (VStatusSrvr::*)() > m_fnCreateStsRespArr;