Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GMOCK方法抛出编译错误_C++_C++11_Gmock - Fatal编程技术网

C++ GMOCK方法抛出编译错误

C++ GMOCK方法抛出编译错误,c++,c++11,gmock,C++,C++11,Gmock,当我尝试实现如下所示的GMOCK方法时,我得到了编译错误,但当我删除它时,代码和模拟类工作正常: MOCK_METHOD2(myfunc, void (std::shared_ptr<route>, std::unique_ptr<message, std::default_delete<message> >)); MOCK_METHOD2(myfunc,void(std::shared_ptr,std::unique_ptr)); 我得到以下编译错误:

当我尝试实现如下所示的GMOCK方法时,我得到了编译错误,但当我删除它时,代码和模拟类工作正常:

MOCK_METHOD2(myfunc, void (std::shared_ptr<route>, std::unique_ptr<message, std::default_delete<message> >));
MOCK_METHOD2(myfunc,void(std::shared_ptr,std::unique_ptr));
我得到以下编译错误:

error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = message; _Dp = std::default_delete<message>]'
             MOCK_METHOD2(ship, void (std::shared_ptr<route>, std::unique_ptr<message, std::default_delete<message> >));
             ^
        In file included from C:/tools/mingw64/x86_64-w64-mingw32/include/c++/memory:81:0,
        ......................................................................................
        C:/tools/mingw64/x86_64-w64-mingw32/include/c++/bits/unique_ptr.h:356:7: note: declared here
               unique_ptr(const unique_ptr&) = delete;
    error:   initializing argument 2 of 'R testing::internal::FunctionMocker<R(A1, A2)>::Invoke(A1, A2) [with R = void; A1 = std::shared_ptr<route>; A2 = std::unique_ptr<message>]'
       R Invoke(A1 a1, A2 a2) {
         ^
    In file included from ...

    C:/tools/mingw64/x86_64-w64-mingw32/include/c++/tuple: In instantiation of 'constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long long unsigned int _Idx = 1ull; _Head = std::unique_ptr<message>]':
    C:/tools/mingw64/x86_64-w64-mingw32/include/c++/tuple:255:44:   recursively required from 'constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const _Head&, const _Tail& ...) [with long long unsigned int _Idx = 1ull; _Head = std::unique_ptr<message>; _Tail = {}]'
    C:/tools/mingw64/x86_64-w64-mingw32/include/c++/tuple:255:44:   required from 'constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const _Head&, const _Tail& ...) [with long long unsigned int _Idx = 0ull; _Head = std::shared_ptr<cmb::mim::MimChannel>; _Tail = {std::unique_ptr<message, std::default_delete<message> >}]'
    C:/tools/mingw64/x86_64-w64-mingw32/include/c++/tuple:531:30:   required from 'constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with _T1 = std::shared_ptr<cmb::mim::MimChannel>; _T2 = std::unique_ptr<message>]'
    C:/work/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h:122:50:   required from 'R testing::internal::FunctionMocker<R(A1, A2)>::Invoke(A1, A2) [with R = void; A1 = std::shared_ptr<cmb::mim::MimChannel>; A2 = std::unique_ptr<message>]'
    C:/work/Mock.hpp:39:5:   required from here
    C:/tools/mingw64/x86_64-w64-mingw32/include/c++/tuple:134:25: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = message; _Dp = std::default_delete<message>]'
           : _M_head_impl(__h) { }
错误:使用已删除函数“std::unique\u ptr::unique\u ptr(const std::unique\u ptr&)[带_Tp=message;_Dp=std::default\u delete]”
模拟方法2(发货、作废(标准::共享、标准::唯一);
^
在C:/tools/mingw64/x86_64-w64-mingw32/include/C++/memory:81:0包含的文件中,
......................................................................................
C:/tools/mingw64/x86_64-w64-mingw32/include/C++/bits/unique_ptr.h:356:7:注意:此处声明
唯一\u ptr(const unique \u ptr&)=删除;
错误:初始化'R testing::internal::FunctionMocker::Invoke(A1,A2)[使用R=void;A1=std::shared\u ptr;A2=std::unique\u ptr]的参数2'
R调用(A1 A1、A2 A2){
^
在文件中包括从。。。
C:/tools/mingw64/x86_64-w64-mingw32/include/C++/tuple:在“constexpr std::_Head_base::_Head_base(const_Head&)[长-长无符号int _Idx=1ull;_Head=std::unique_ptr]的实例化中:
C:/tools/mingw64/x86\u 64-w64-mingw32/include/C++/tuple:255:44:递归地从“constexpr std::_tuple\u impl::_tuple\u impl(const\u Head&,const\u Tail&…)[长-长无符号int\u Idx=1all;_Head=std::unique\u ptr;_Tail={}
C:/tools/mingw64/x86\u 64-w64-mingw32/include/C++/tuple:255:44:必须来自“constexpr std::”tuple\u impl:::“tuple\u impl(const\u Head&,const\u Tail&…)[长-长无符号int\u Idx=0ull;\u Head=std::shared\u ptr;\u Tail={std::unique\u ptr}”
C:/tools/mingw64/x86_64-w64-mingw32/include/C++/tuple:531:30:必须来自“constepr std::tuple::tuple(constT1&,constT2&)[带T1=std::sharedptr;T2=std::uniqueptr]”
C:/work/googletest/googlemock/include/gmock/gmock生成的函数mockers.h:122:50:从'R testing::internal::FunctionMocker::Invoke(A1,A2)中需要[R=void;A1=std::shared\u ptr;A2=std::unique\u ptr]'
C:/work/Mock.hpp:39:5:从这里开始需要
C:/tools/mingw64/x86_64-w64-mingw32/include/C++/tuple:134:25:错误:使用删除的函数'std::unique\u ptr::unique\u ptr(const std::unique\u ptr&)[带utp=message;_Dp=std::default\u delete]'
:_M_head_impl(__h){}

我不确定错误是什么以及如何修复它-注释或删除模拟方法声明编译正常吗?

我能够通过如下所述操作函数来解决问题:

MOCK_METHOD2(myfuncproxy, void (std::shared_ptr<route>, message&));

void myfunc((std::shared_ptr<route> r, std::unique_ptr<message, std::default_delete<message> > m)
{
    myfuncproxy(r,*m.get());
}
MOCK_METHOD2(myfuncproxy,void(std::shared_ptr,message&));
void myfunc((std::shared\u ptr,std::unique\u ptr m)
{
myfuncproxy(r,*m.get());
}