2009-11-29 14 views
11

Ich erhalte zur Zeit Compiler-Warnungen, die der Warnung ähneln, die ich im Fragetitel angegeben habe. Warnungen wie ....boost :: system :: (...) _ kategorie definiert, aber nicht verwendet

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 das Programm kennen ist nicht in irgendeiner Weise beeinträchtigt wird. Allerdings mag ich keine Warnungen, die herumliegen, aber ich habe keine Ahnung, was diese Warnungen mir zu sagen versuchen, abgesehen davon, dass etwas, das mit Boost definiert und verwandt ist, irgendwo herumhängt, wo es nicht benutzt wird. Aber alles was ich definiert habe, habe ich benutzt. Die Boost-Bibliotheken, die ich verwende, sind die Zufallsbibliothek und die Dateisystembibliothek.

Wenn ich die Quelle der Warnung überprüfe, erscheint die Datei error_category.hpp von Boost und markiert einige static const s, die als "vordefinierte Fehlerkategorien" oder "veraltete Synonyme" kommentiert wurden. Vielleicht hat das Problem etwas mit meiner Fehlerbehandlung (oder dem Fehlen von) bei der Verwendung der Bibliothek zu tun?

Kann jemand einen Einblick geben, warum diese Warnungen auftauchen? Fehle ich etwas völlig?

P.S. Warnungen sind auf maximalem Niveau.

Antwort

7

Dies bezieht sich auf die Fehlercode-Bibliothek in der Boost.System-Bibliothek. Boost error_codes enthalten zwei Attribute: Werte und Kategorien. Um Fehlercodes erweiterbar zu machen, so dass Bibliotheksbenutzer ihre eigenen Fehlerkategorien entwerfen können, benötigten die Boostdesigner eine Möglichkeit, eine eindeutige Fehlercodekategorie darzustellen. Eine einfache ID-Nummer würde nicht ausreichen, da dies dazu führen könnte, dass zwei Projekte widersprüchliche ID-Nummern für benutzerdefinierte Fehlerkategorien verwenden würden.

Also, was sie taten, war die Verwendung von Speicheradressen in Form von statischen Objekten, die von der Basisklasse error_category erben. Diese Variablen tun eigentlich nichts anderes, als als eindeutige Bezeichner einer bestimmten Fehlerkategorie zu dienen. Da es sich im Wesentlichen um statische Dummy-Objekte mit eindeutigen Adressen im Speicher handelt, können Sie problemlos eigene benutzerdefinierte Fehlerkategorien erstellen, die andere Fehlerkategorie-IDs nicht beeinträchtigen. Weitere Informationen finden Sie unter here.

Ich nehme an, dass das, was Sie sehen, ein Nebeneffekt dieser Designentscheidung ist. Da diese Variablen in Ihrem Programm nie tatsächlich verwendet werden, generiert der Compiler Warnungen. Es genügt zu sagen, ich glaube nicht, dass Sie etwas falsch machen.

+0

Ich habe das gleiche Problem, aber mein Linker wird den Job nicht abgeschlossen, so dass es sicher aussieht wie ein großes Problem, soweit ich sehen kann. – Rhubarb

+12

... mit der Ausnahme, dass man '-Werror' nicht mehr benutzen kann, weil – vladr

20

Ich stimme @Charles Salvia zu, aber wollte das mindestens ab Boost 1.44.0 hinzufügen, diese Definitionen sind nun eingepackt - um als veraltet ausgeschlossen zu werden. Also, wenn Sie sie nicht verwenden, schließen Sie einfach die folgenden Zeilen ein, bevor Sie die Header-Datei einfügen:

#ifndef BOOST_SYSTEM_NO_DEPRECATED 
#define BOOST_SYSTEM_NO_DEPRECATED 1 
#endif 
+0

ich das definiere, aber es nicht die Warnungen unterdrückt. –

+2

Es hat für mich funktioniert. –

+0

IMO sollte dies die Antwort sein, oder das -D Compiler-Flag verwenden, um diese Definition anzugeben. – ColinCren

Verwandte Themen