"'string' ambiguous", wenn boost/spirit.hpp eingebunden
-
Hi, folgender Code:
#include <boost/spirit.hpp> struct string { }; int main() { string x; }liefert bei mir (VC 8, Win XP) reproduzierbar den Fehler "error C2872: 'string' : ambiguous symbol". Unter OS X/GCC4 (mit XCode) gibt es keinen Fehler.
Liegt das am Compiler oder am Header?
/EDIT: Sorry, aus Gewohnheit falsches Forum genommen. Ist wohl in VisualC++-Forum besser aufgehoben.
-
Na wird wohl am Include liegen, dass es bereits ne Klasse string gibt. Kannst dir ja durch explizite Namespace-Angabe helfen:
#include <boost/spirit.hpp> struct string { }; int main() { ::string x; }
-
Michael E. schrieb:
Na wird wohl am Include liegen, dass es bereits ne Klasse string gibt.
So einfach ist es nicht. Ich habe den Namensbereich "boost::spirit" ja nicht eingebunden und der Header sollte eigentlich nicht "einfach so" das Symbol "string" deklarieren. Hinzu kommt, dass das Problem unter dem GCC 4 ja nicht existiert.
-
Das wird dir wohl nicht nur mit string passieren. Anscheinend wird irgendwie in spirit in einem header eine using direktive genutzt.
Ich bin der Meinung, es auch schon mal in der boost-Mailingliste gesehen zu haben. Aber kann mich nicht mehr wirklich daran erinnern. Dein Post kam mir jedenfalls nicht ungwöhnlich vor.
Deshalb habe ich einen ähnlichen Beitrag gefunden:
http://www.nabble.com/file_iterator-needs-workaround-for-VC8-t1031211.html
-
Oh, Danke für die Info. Ist ja in der Tat komisch.
-
Ich hab mal nachgeschaut und zwei Headerdateien gefunden wo ein using namespace std; drin steht
spirit/phoenix/closures.hpp
spirit/fusion/sequence/detail/manip.hpp
[edit]Kommando zurück. Die stehen da nur Klassenintern (string_ios_manip::read und closure_member::eval).[edit]
-
Yo, eine real world library, wo sich bestätigt, das man usings in Headern einfach meiden sollte.
