2016-06-07 26 views
6

Tôi có kiểm tra sau:Boost.Test kiểm tra xem một con trỏ là null

BOOST_CHECK_NE(pointer, nullptr); 

Việc lập thất bại do

/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’)

Điều gì là sai và làm thế nào tôi nên kiểm tra cho con trỏ null?

Trả lời

5

Vui lòng cung đơn giản nhất cho một con trỏ là không null là thế này:

BOOST_CHECK(pointer); 

Một con trỏ null ngầm chuyển thành false, một con trỏ null ngầm chuyển thành true.

Vì vấn đề với trường hợp sử dụng của bạn là: nullptr không phải là loại con trỏ, nó thuộc loại std::nullptr_t. Nó có thể được chuyển đổi thành bất kỳ kiểu con trỏ nào (hoặc con trỏ thành kiểu thành viên). Tuy nhiên, không có quá tải << để chèn std::nullptr_t vào luồng. Bạn sẽ phải đúc nullptr vào loại con trỏ thích hợp để làm cho nó hoạt động.

3

Như đã đề cập trong thông báo lỗi, nullptr có quá tải không rõ ràng.

BOOST_CHECK(pointer); 

hoặc

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

nên thực hiện công việc.

Các vấn đề liên quan