C++ 是否可以直接将QString输入(例如)googletest';s ADD_FAILURE()宏?
我已经增强了我的googletest环境,以处理一些Qt类型,如QString(有关更多详细信息,请参阅) 有没有办法进一步增强我的gtest,以便能够直接使用C++ 是否可以直接将QString输入(例如)googletest';s ADD_FAILURE()宏?,c++,qt,googletest,C++,Qt,Googletest,我已经增强了我的googletest环境,以处理一些Qt类型,如QString(有关更多详细信息,请参阅) 有没有办法进一步增强我的gtest,以便能够直接使用qString,或者没有办法避免将那些qString包装在qUtf8Printable()中 澄清: 编写ADD_FAILURE()c:\program files(x86)\microsoft visual studio 14.0\vc\include\ostream(495):注意:kann“std::basic_ostream&st
qString
,或者没有办法避免将那些qString
包装在qUtf8Printable()
中
澄清:编写
ADD_FAILURE()c:\program files(x86)\microsoft visual studio 14.0\vc\include\ostream(495):注意:kann“std::basic_ostream&std::basic_ostream::operatorQString不会为流插入提供相关的非成员,这就是问题的原因。(编译器未找到任何接受const QString&as参数的二进制运算符函数)
查看与您的问题相关的问题:
运算符您可以显示整个错误消息吗?通常它会显示这两种类型…请尝试使用QString(“此处的文本”).toUtf8().constData();
并告诉我它是否有效!您还可以检查.tostString().c_str()
。还有tostString()方法,但更多信息:@AlbertoMiola谢谢。添加失败()@Yakk AdamNevraumont在这里,但原始错误消息是德语的(这就是为什么我把翻译版本放在那里).googletest\include\gtest\gtest message.h(131):错误C2679:Binärer运算符”@CharonX当编译器无法匹配运算符时,它会告诉您左侧和右侧哪些类型是它无法匹配的。您正在查看某种摘要视图,而不是编译器的实际输出吗?谢谢,这正是我要查找的!我可以扩展包含PrintTo()的gtest标头Qt扩展并直接将qString与调用::testing::internal::AssertHelper()
(如ADD_FAILURE()
)的gtest宏一起使用
inline void PrintTo(const QString& str, ::std::ostream* os)
{
*os << "<" << qUtf8Printable(str) << ">";
}
//...
ADD_FAILURE() << QString("Test!");
//...
gtest-message.h(131): error C2679: Binary Operator "<<": Could not find an operator that accepts "const QString" (...)
2>c:\development\external\googletest\include\gtest\gtest-message.h(131): error C2679: Binärer Operator "<<": Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ "const QString" akzeptiert (oder keine geeignete Konvertierung möglich)
2> c:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(495): note: kann "std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_streambuf<char,std::char_traits<char>> *)"
2> c:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(475): note: oder "std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(const void *)"
2> c:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(455): note: oder "std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(long double)" sein
... **(snip)** ...
2> c:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(981): note: oder "std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>,T>(std::basic_ostream<char,std::char_traits<char>> &&,const _Ty &)"
2> with
2> [
2> T=QString,
2> _Ty=QString
2> ]
2> c:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(1019): note: oder "std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const std::error_code &)"
2> c:\development\external\googletest\include\gtest\gtest-message.h(131): note: bei Anpassung der Argumentliste "(std::stringstream, const QString)"
2> c:\development\test\src\codetest.cpp(390): note: Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "testing::Message &testing::Message::operator <<<QString>(const T &)".
2> with
2> [
2> T=QString
2> ]
DEFINES += QT_NO_CAST_TO_ASCII
std::ostream & operator<<(std::ostream & stream, const QString & str)
{
const QByteArray data = str.toUtf8();
stream << std::string(data.constData(), data.size());
return stream;
}