2009-11-29 36 views
11

Tôi hiện đang nhận được cảnh báo trình biên dịch giống với cảnh báo tôi đã đưa ra trong tiêu đề câu hỏi. Cảnh báo như ....boost :: system :: (...) _ loại được xác định nhưng không được sử dụng

warning: 'boost::system::generic_category' defined but not used

warning: 'boost::system::posix_category' defined but not used

warning: 'boost::system::errno_ecat' defined but not used

warning: 'boost::system::native_ecat' defined but not used

Theo như tôi biết chương trình không bị ảnh hưởng trong bất kỳ cách nào. Tuy nhiên, tôi không thích cảnh báo treo xung quanh, nhưng tôi không có ý tưởng những cảnh báo này đang cố gắng nói với tôi bên cạnh đó một cái gì đó được xác định và liên quan đến tăng là treo xung quanh một nơi nào đó không được sử dụng. Tuy nhiên, mọi thứ tôi đã định nghĩa, tôi đã sử dụng. Các thư viện tăng tôi đang sử dụng là thư viện ngẫu nhiên và thư viện hệ thống tập tin.

Khi tôi kiểm tra nguồn của cảnh báo, nó sẽ trả về tệp error_category.hpp của Boost và nêu bật một số static const s được nhận xét là "danh mục lỗi được xác định trước" hoặc "từ đồng nghĩa không dùng nữa". Có lẽ vấn đề có liên quan đến việc xử lý lỗi của tôi (hoặc thiếu) khi sử dụng thư viện?

Có ai có thể cung cấp một số thông tin chi tiết về lý do các cảnh báo này xuất hiện không? Tôi hoàn toàn thiếu một cái gì đó?

P.S. Cảnh báo ở mức tối đa.

Trả lời

7

Điều này liên quan đến thư viện error_code trong thư viện Boost.System. Boost error_codes chứa hai thuộc tính: giá trị và danh mục. Để làm cho error_codes có thể mở rộng để người dùng thư viện có thể thiết kế các danh mục lỗi của riêng mình, các nhà thiết kế tăng cường cần một số cách để thể hiện một danh mục mã lỗi duy nhất. Một số ID đơn giản sẽ không đủ, bởi vì điều này có thể dẫn đến hai dự án sử dụng các số ID xung đột cho các danh mục lỗi tùy chỉnh.

Vì vậy, về cơ bản, những gì họ đã làm là sử dụng địa chỉ bộ nhớ, dưới dạng các đối tượng tĩnh kế thừa từ lớp cơ sở error_category. Các biến này không thực sự làm bất kỳ điều gì ngoại trừ để phân phối dưới dạng số nhận dạng duy nhất của một danh mục lỗi nhất định. Vì chúng chủ yếu là các đối tượng giả tĩnh với các địa chỉ duy nhất trong bộ nhớ, bạn có thể dễ dàng tạo các danh mục lỗi tùy chỉnh của riêng mình mà sẽ không ảnh hưởng đến các danh mục lỗi khác "ID". Xem here để biết thêm thông tin.

Tôi cho rằng những gì bạn thấy là tác dụng phụ của quyết định thiết kế này. Vì các biến này không bao giờ thực sự được sử dụng trong chương trình của bạn, trình biên dịch tạo ra các cảnh báo. Đủ để nói, tôi không nghĩ rằng bạn đang làm bất cứ điều gì sai trái.

+0

Tôi đang gặp vấn đề tương tự nhưng mối liên kết của tôi không hoàn thành công việc, vì vậy nó chắc chắn giống như vấn đề lớn như tôi thấy. – Rhubarb

+12

... ngoại trừ một người không còn có thể sử dụng '-Werror' vì điều này – vladr

20

Tôi đồng ý với @Charles Salvia, nhưng muốn thêm ít nhất là Boost 1.44.0, các định nghĩa này hiện được bao bọc - bị loại trừ là không được chấp nhận. Vì vậy, nếu bạn không sử dụng chúng, chỉ cần bao gồm các dòng sau trước khi bạn bao gồm tệp tiêu đề:

#ifndef BOOST_SYSTEM_NO_DEPRECATED 
#define BOOST_SYSTEM_NO_DEPRECATED 1 
#endif 
+0

Tôi đang xác định điều đó nhưng không làm mờ các cảnh báo. –

+2

Nó làm việc cho tôi. –

+0

IMO này phải là câu trả lời hoặc sử dụng cờ trình biên dịch -D để chỉ định xác định này. – ColinCren

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