2016-06-07 24 views
6

Ben aşağıdaki test:bir işaretçi boş olup olmadığını kontrol Boost.Test

BOOST_CHECK_NE(pointer, nullptr); 

derleme yanlış nedir

/xxx/include/boost/test/tools/detail/print_helper.hpp:50:14: error: ambiguous overload for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream}’ and ‘std::nullptr_t’)

nedeniyle başarısız olur ve ben boş göstericilerle için nasıl test etmeliyim?

false için, boş olmayan bir işaretçi dolaylı true dönüştürür
BOOST_CHECK(pointer); 

bir boş gösterici dolaylı dönüştürür:

cevap

5

boş olmayan olmak bir işaretçi için kolay kontrol şudur.

Kullanım durumunuzla ilgili sorunun ne olduğuna ilişkin olarak: nullptr, bir işaretçi türü değil, std::nullptr_t türüdür. Herhangi bir işaretçi türüne (veya üye türüne işaretçi) dönüştürülebilir. Bununla birlikte, std::nullptr_t'u bir akışa eklemek için << aşırı yüklenme yoktur. Çalıştırmak için nullptr'u uygun işaretçi türüne çevirmeniz gerekir.

3

Hata mesajında ​​belirtildiği gibi, nullptr muğlak aşırı yüklenmelere sahiptir.

BOOST_CHECK(pointer); 

veya

BOOST_CHECK_NE(pointer, static_cast<decltype(pointer)>(nullptr)); 

iş yapmak gerekir.

İlgili konular