gpt4 book ai didi

c++ - 使用 Google Test 中的 EXPECT_EQ 比较两个 boost::variant 对象

转载 作者:太空狗 更新时间:2023-10-29 21:26:04 27 4
gpt4 key购买 nike

我无法编译以下代码的最后一行:

typedef boost::variant<std::vector<int8_t>, std::vector<std::string>> Container; 

std::vector<std::string> v1;
v1.push_back("sd");
Container c1;
c1 = v1;

std::vector<int8_t> v2;
v2.push_back(1);
v2.push_back(2);
Container c2;
c2 = v2;

EXPECT_EQ(c1,c2);

但是,如果我用这一行替换它,它会起作用:

EXPECT_EQ(c1==c2,true);

EXPECT_EQ 是来自 Google Test 的函数。

这里有什么问题?

VS2010编译报错如下:

1>          c:\gtest-1.6.0\include\gtest\gtest-printers.h(338) : see reference to function template instantiation 'void testing_internal::DefaultPrintNonContainerTo<T>(const T &,std::ostream *)' being compiled
1> with
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest-printers.h(376) : see reference to function template instantiation 'void testing::internal::DefaultPrintTo<T>(testing::internal::IsNotContainer,testing::internal::false_type,const T &,std::ostream *)' being compiled
1> with
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest-printers.h(600) : see reference to function template instantiation 'void testing::internal::PrintTo<T>(const T &,std::ostream *)' being compiled
1> with
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest-printers.h(591) : while compiling class template member function 'void testing::internal::UniversalPrinter<T>::Print(const T &,std::ostream *)'
1> with
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest-printers.h(697) : see reference to class template instantiation 'testing::internal::UniversalPrinter<T>' being compiled
1> with
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest-printers.h(678) : see reference to function template instantiation 'void testing::internal::UniversalPrint<T>(const T &,std::ostream *)' being compiled
1> with
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest-printers.h(790) : see reference to function template instantiation 'void testing::internal::UniversalTersePrint<T>(const T &,std::ostream *)' being compiled
1> with
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest.h(1301) : see reference to function template instantiation 'std::string testing::PrintToString<T1>(const T &)' being compiled
1> with
1> [
1> T1=Com::ObjRepWrap::Container,
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest.h(1326) : see reference to function template instantiation 'testing::internal::String testing::internal::FormatForComparisonFailureMessage<T1,T2>(const T1 &,const T2 &)' being compiled
1> with
1> [
1> T1=Com::ObjRepWrap::Container,
1> T2=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest.h(1353) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperEQ<T1,T2>(const char *,const char *,const T1 &,const T2 &)' being compiled
1> with
1> [
1> T1=Com::ObjRepWrap::Container,
1> T2=Com::ObjRepWrap::Container
1> ]
1> c:\visual studio 2010\projects\db\xxx\main.cpp(127) : see reference to function template instantiation 'testing::AssertionResult testing::internal::EqHelper<lhs_is_null_literal>::Compare<Com::ObjRepWrap::Container,Com::ObjRepWrap::Container>(const char *,const char *,const T1 &,const T2 &)' being compiled
1> with
1> [
1> lhs_is_null_literal=false,
1> T1=Com::ObjRepWrap::Container,
1> T2=Com::ObjRepWrap::Container
1> ]
1>c:\boost_1_49_0\boost\variant\detail\variant_io.hpp(64): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const T1' (or there is no acceptable conversion)
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(679): could be 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(726): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(764): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(811): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(937): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(944): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(951): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(958): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(968): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>,T>(std::basic_ostream<_Elem,_Traits> &&,_Ty)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> T=T1,
1> _Ty=T1
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(1085): or 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const std::error_code &)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\boost_1_49_0\boost\blank.hpp(93): or 'std::basic_ostream<_Elem,_Traits> &boost::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const boost::blank &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(186): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(192): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(199): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(206): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(226): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(260): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(280): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(int)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(305): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned int)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(325): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(345): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned long)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(366): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(386): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(407): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(float)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(427): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(double)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(447): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long double)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(467): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ostream(487): or 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_streambuf<_Elem,_Traits> *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> while trying to match the argument list '(std::basic_ostream<_Elem,_Traits>, const T1)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\boost_1_49_0\boost\variant\variant.hpp(858) : see reference to function template instantiation 'void boost::detail::variant::printer<OStream>::operator ()<const T>(const T &) const' being compiled
1> with
1> [
1> OStream=std::basic_ostream<char,std::char_traits<char>>,
1> T=T1
1> ]
1> c:\boost_1_49_0\boost\variant\detail\visitation_impl.hpp(145) : see reference to function template instantiation 'void boost::detail::variant::invoke_visitor<Visitor>::internal_visit<const T>(T &,int)' being compiled
1> with
1> [
1> Visitor=boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>>,
1> T=T1
1> ]
1> c:\boost_1_49_0\boost\variant\detail\visitation_impl.hpp(173) : see reference to function template instantiation 'void boost::detail::variant::visitation_impl_invoke_impl<Visitor,VoidPtrCV,T>(int,Visitor &,VoidPtrCV,T *,boost::mpl::false_)' being compiled
1> with
1> [
1> Visitor=boost::detail::variant::invoke_visitor<boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>>>,
1> VoidPtrCV=const void *,
1> T=T1
1> ]
1> c:\boost_1_49_0\boost\variant\detail\visitation_impl.hpp(256) : see reference to function template instantiation 'void boost::detail::variant::visitation_impl_invoke<Visitor,VoidPtrCV,T1,NoBackupFlag>(int,Visitor &,VoidPtrCV,T *,NoBackupFlag,int)' being compiled
1> with
1> [
1> Visitor=boost::detail::variant::invoke_visitor<boost::detail::variant::printer<std::basic_ostream<char,std::char_traits<char>>>>,
1> VoidPtrCV=const void *,
1> NoBackupFlag=boost::variant<std::vector<testing::internal::string>,std::vector<int8_t>>::has_fallback_type_,
1> T=T1
1> ]

最佳答案

EXPECT_EQ(c1==c2);

这失败了,因为它需要两个参数(参见 this )。

你可以使用 EXPECT_TRUE(condition);如果它适合您的需要:

EXPECT_TRUE(c1==c2);

编辑:

参见 this :

We used to require the arguments to support the << operator for streaming to an ostream, but it's no longer necessary since v1.6.0 (if << is supported, it will be called to print the arguments when the assertion fails; otherwise Google Test will attempt to print them in the best way it can.

因此,除非您使用的版本不是 1.6.0 或更高版本,否则您需要有 operator<<定义。

关于c++ - 使用 Google Test 中的 EXPECT_EQ 比较两个 boost::variant 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12743627/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com