web-dev-qa-db-ja.com

GTESTのNULLPTRでPTRを比較します

いくつかのコードがあります。

EXPECT_NE(nullptr,ptr);
 _

そして、次のコンパイルエラーが発生します。

'operator <<' is ambiguous

could be 'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<<void>(std::nullptr_t)'
or       'std::basic_ostream<char,std::char_traits<char>> &testing::internal2::operator <<<char,std::char_traits<char>,T>(std::basic_ostream<char,std::char_traits<char>> &,const T &)'
 _

これは図書館のバージョンの問題になることができますか?

もっと明確になりたい場合は、使用することもできます

_EXPECT_TRUE(ptr != nullptr);
_

(それが私が通常していることです)

BTW。私の仕事のプロジェクトでは、私はまだC++ 98(まだ太陽とAIXのための建物の構築)と協力しなければならず、私は自分のNullPtrTクラスとNullPtrオブジェクトを作成しました。実際にはGTEST _EXPECT_EQ_と_EXPECT_NE_マクロで動作します。私がすることができるようにしてください

_EXPECT_NE(NullPtr, ptr);
_

私はその仕事を正確に作った方法を覚えていません:)

3
axalis
namespace {
  template<class T>
  auto not_nullptr(T*p) -> testing::AssertionResult
  {
    if (p)
      return testing::AssertionSuccess();
    else
      return testing::AssertionFailure() << "pointer is null";
  }
}

...

EXPECT_TRUE(not_nullptr(ptr));
 _

参照:

https://github.com/google/googlet/blob/master/googletest/docs/advanced.md#using-afunction-that-returns-an-astertionResult

1
Richard Hodges