C++ 使用Google测试中的EXPECT_EQ比较两个boost::variant对象
我无法编译以下代码的最后一行:C++ 使用Google测试中的EXPECT_EQ比较两个boost::variant对象,c++,googletest,C++,Googletest,我无法编译以下代码的最后一行: 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
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是谷歌测试的一个函数
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);
这里的问题是什么
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);
VS2010中的编译器错误如下:
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);
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> ]
1>c:\gtest-1.6.0\include\gtest\gtest printers.h(338):请参阅正在编译的函数模板实例化“void testing\u internal::DefaultPrintNonContainerTo(const T&,std::ostream*)”的参考
1> 与
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest printers.h(376):请参阅正在编译的函数模板实例化“void testing::internal::DefaultPrintTo(testing::internal::IsNotContainer,testing::internal::false_type,const T&,std::ostream*)
1> 与
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest printers.h(600):请参阅正在编译的函数模板实例化“void testing::internal::PrintTo(const T&,std::ostream*)”的参考
1> 与
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest printers.h(591):在编译类模板成员函数“void testing::internal::UniversalPrinter::Print(const T&,std::ostream*)”时
1> 与
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest printers.h(697):请参阅正在编译的类模板实例化“testing::internal::UniversalPrinter”的参考
1> 与
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest printers.h(678):请参阅正在编译的函数模板实例化“void testing::internal::UniversalPrint(const T&,std::ostream*)”的参考
1> 与
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest printers.h(790):请参阅正在编译的函数模板实例化“void testing::internal::UniversalTersePrint(const T&,std::ostream*)”的参考
1> 与
1> [
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest.h(1301):请参阅正在编译的函数模板实例化“std::string testing::PrintToString(const T&)”的参考
1> 与
1> [
1> T1=Com::ObjRepWrap::Container,
1> T=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest.h(1326):请参阅正在编译的函数模板实例化“testing::internal::String testing::internal::FormatForComparisonFailureMessage(const T1&,const T2&)”的参考
1> 与
1> [
1> T1=Com::ObjRepWrap::Container,
1> T2=Com::ObjRepWrap::Container
1> ]
1> c:\gtest-1.6.0\include\gtest\gtest.h(1353):请参阅正在编译的函数模板实例化“testing::AssertionResult testing::internal::CmpHelperEQ(const char*,const char*,const T1&,const T2&)”的参考
1> 与
1> [
1> T1=Com::ObjRepWrap::Container,
1> T2=Com::ObjRepWrap::Container
1> ]
1> c:\visual studio 2010\projects\db\xxx\main.cpp(127):请参阅正在编译的函数模板实例化“testing::AssertionResult testing::internal::EqHelper::Compare(const char*、const char*、const T1&、const T2&)”
1> 与
1> [
1> lhs_为_null_literal=false,
1> T1=Com::ObjRepWrap::Container,
1> T2=Com::ObjRepWrap::Container
1> ]
1> c:\boost\u 1\u 49\u 0\boost\variant\detail\variant\io.hpp(64):错误C2679:二进制'
这会失败,因为它需要两个参数(请参阅)
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\u TRUE(条件)代码>如果它适合您的需要:
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_TRUE(c1==c2);
编辑:
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);
见:
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)的Sorry;我已经在我的问题中解决了这个问题。