Frage

Ich bin derzeit Compiler-Warnungen erhalten, die die Warnung ähnelt ich in der Frage Titel gab. Warnungen wie ....

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

Soweit ich weiß, dass das Programm nicht in irgendeiner Weise beeinträchtigt wird. Allerdings mag ich nicht Warnungen hängen herum, aber ich habe keine Ahnung, was diese Warnungen mir versuchen, außer, dass etwas zu sagen, definiert und im Zusammenhang um irgendwo zu steigern hängt nicht verwendet wird. Doch alles, was ich definiert habe, habe ich verwendet. Die Boost-Bibliotheken ich verwende sind die Zufallsbibliothek und die Dateisystem-Bibliothek.

Wenn ich überprüfen, um die Quelle der Warnung bringt es Erhöhung der error_category.hpp-Datei und zeigt einige static consts, die entweder als „vordefinierte Fehlerkategorien“ oder „veraltet Synonyme“ werden kommentiert. Vielleicht ist das Problem hat etwas mit meinem Fehler zu tun Umgang mit (oder fehlende), wenn die Bibliothek mit?

Kann jemand etwas Einblick in Bezug auf, warum diese Warnungen auftauchen? Bin ich etwas völlig fehlt?

P. S. Warnungen sind bei max Ebene.

War es hilfreich?

Lösung

Dies bezieht sich auf die error_code Bibliothek in der Boost.System Bibliothek. Boost-error_codes enthält zwei Attribute: Werte und Kategorien. Um error_codes erweiterbar zu machen, so dass die Bibliotheksbenutzer ihre eigenen Fehlerkategorien entwerfen können, benötigt die Boost-Designer eine Möglichkeit eine einzigartige Fehlercode Kategorie zu repräsentieren. Eine einfache ID-Nummer nicht ausreichen würde, weil dies in zwei Projekten mit widerstreitenden ID-Nummern für benutzerdefinierte Fehlerkategorien führen konnte.

Also im Grunde, was sie taten, waren Speicheradressen zu verwenden, in Form von statischen Objekten, die von der Basisklasse error_category erben. Diese Variablen nicht wirklich etwas zu tun, außer als eindeutige Kennungen einer bestimmten Fehlerkategorie zu dienen. Weil sie im wesentlichen statische Blind Objekte mit eindeutigen Adressen im Speicher sind, können Sie einfach Ihre eigenen Fehlerkategorien erstellen, die mit anderer Fehlerkategorie nicht stören „IDs.“ Siehe hier für weitere Informationen .

Ich nehme an, was Sie sehen, ein Nebeneffekt dieser Design-Entscheidung ist. Da diese Variablen sind eigentlich nie in Ihrem Programm verwendet, erzeugt der Compiler-Warnungen. Es genügt zu sagen, ich glaube nicht, Sie tun etwas falsch.

Andere Tipps

Ich bin mit @Charles Salvia, wollte aber, dass zumindest als Boost 1.44.0 hinzuzufügen, werden diese Definitionen nun eingewickelt - ausgeschlossen werden als veraltet. Also, wenn Sie sie nicht verwenden, sind nur die folgenden Zeilen, bevor Sie die Header-Datei:

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif

habe ich versucht, die BOOST_SYSTEM_NO_DEPRECATED vorgeschlagen von @ M.Tibbits, und es schien einige Beispiele der Warnungen zu entfernen (in einem großen System unter Linux gebaut), aber nicht alle.

Allerdings mit -isystem statt -I die Boost-Header enthalten (und ihre Probleme ignorieren) funktioniert für mich.

Vorgeschlagen von https://exceptionshub.com/how-do-you-disable-the-unused-variable-warnings-coming-out-of-gcc.html

(schräg) von GNU GCC Erklärt: http: //gcc.gnu .org / onlinedocs / gcc / Verzeichnis-options.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top