Hello, I have written a sax parser that implements xerces-c. if i declare in my Xml.h the public XMLFormatTarget i get can't compile (see error below). However if i compile but don't implement in the class the XMLFormatTarget it compiles and works properly.
Does anybody know what is the problem ??? thanks [XmlXercesFactory]# make clean all rm -f *.o *~ SaxParsing_classtest *.a *core* *.xml *.xml_parsed g++ -g -w -O2 -L/usr/local/lib XmlFactory.cpp -c -o XmlFactory.o g++ -g -w -O2 -L/usr/local/lib SaxParser.cpp -c -o SaxParser.o g++ -g -w -O2 -L/usr/local/lib DomParser.cpp -c -o DomParser.o g++ -g -w -O2 -L/usr/local/lib Xml.cpp -c -o Xml.o /usr/local/include/xercesc/framework/XMLFormatter.hpp: In constructor `Xml::Xml()': /usr/local/include/xercesc/framework/XMLFormatter.hpp:412: error: `xercesc_2_6::XMLFormatter::XMLFormatter()' is private Xml.cpp:5: error: within this context make: *** [Xml.o] Error 1 I have different files show below: *********** XMLFactory.h *********** #include "Xml.h" #include "DomParser.h" #include "SaxParser.h" class XmlFactory { public: XmlFactory(std::string v,bool d, bool n, bool s, bool fs, std::string e); /* * Sets the appropiate xml parser defined by user * 2 possiblities: * Dom: Domparser works with a copy in memory of the file * Sax: reads the xmlfile without keeping anything in memory*/ Xml* setParser(std::string type); virtual ~XmlFactory(); // ----------------------------- ############################## Xml.h ############################## #ifndef XML_H #define XML_H #ifndef XERCES_CPP_NAMESPACE_USE #define XERCES_CPP_NAMESPACE_USE #endif //Std libs #include <iostream> #include <string> #include <vector> //Required for XmlParsing #include <xercesc/parsers/XercesDOMParser.hpp> #include <xercesc/parsers/SAXParser.hpp> #include <xercesc/dom/DOM.hpp> #include <xercesc/util/XMLString.hpp> #include <xercesc/util/PlatformUtils.hpp> #include <xercesc/framework/XMLPScanToken.hpp> #include <xercesc/util/XMLUniDefs.hpp> #include <xercesc/util/XMLUni.hpp> #include <xercesc/sax/AttributeList.hpp> #include <xercesc/sax2/SAX2XMLReader.hpp> #include <xercesc/sax2/XMLReaderFactory.hpp> #include <xercesc/sax2/DefaultHandler.hpp> #include <xercesc/sax2/Attributes.hpp> #include <xercesc/util/XMLChTranscoder.hpp> #include <xercesc/framework/XMLFormatter.hpp> #include <xercesc/util/XMemory.hpp> #include <xercesc/util/OutOfMemoryException.hpp> #include <xercesc/util/TransService.hpp> #include "Transcode.h" #This declaration of the class doesn't work class Xml : public DefaultHandler, public XMLFormatTarget { //The declaration below works //class Xml : public DefaultHandler { public: /* * Constructor */ /*XmlParser(XercesDOMParser *parser) ;*/ Xml(); virtual ~Xml(); ...... override xerces functions here.... .... ############################################# SaxParser.h ############################################ SaxParser::SaxParser(std::string v,bool d, bool n, bool s, bool fs, std::string e) { std::cout << "Trying to instantiate SAXParser" << std::endl; // bool fExpandNS ; // XMLFormatter *Formatter; // XMLFormatter::UnRepFlags UnRepFlags = XMLFormatter::UnRep_CharRef; // bool expandNamespaces= false ; // const char * encode = strdup(e.c_str()); // // XMLTranscoder *transcoder = new XMLTranscoder(); // // const XMLCh* test = transcoder->getEncodingName(); // // XMLRecognizer::Encodings fEncoding; // try { // Formatter = new XMLFormatter(encode , this , XMLFormatter::NoEscapes, UnRepFlags); // } // catch (const XMLException& ex) { // std::cout << "ERROR MESSAGE:" // << Error(ex.getMessage()) <<"\n"; // exit(0); // } // std::cout << Formatter->getEncodingName() << std::endl; // exit(0); doNamespaces = n; doSchema = s; schemaFullChecking = fs; Validation_scheme = strdup(v.c_str()) ; // This is useful for validating DTD files if required //requires access to the dtd file ,defined in the header of xml file loadexternaldtd = d; if (strcasecmp(Validation_scheme,"always") == 0) { SAX2XMLReader::ValSchemes valScheme = SAX2XMLReader::Val_Always; } else if(strcasecmp(Validation_scheme,"never") == 0) { SAX2XMLReader::ValSchemes valScheme = SAX2XMLReader::Val_Never; } else { SAX2XMLReader::ValSchemes valScheme = SAX2XMLReader::Val_Auto; } //std::cout << "DTD:"<< d << " NS:" <<doNamespaces << " Schema:" << doSchema << " FS:" << schemaFullChecking << " Val:" << Validation_scheme << std::endl; try { c_parser = XMLReaderFactory::createXMLReader(); } catch (const XMLException& ex) { std::cout << "Error during Sax2Xmlreader parsing:\n" << Error(ex.getMessage()) << "\n"; } // catch (const OutOfMemoryException&) // { // XERCES_STD_QUALIFIER cerr << "OutOfMemoryException" << XERCES_STD_QUALIFIER endl; // } c_parser->setErrorHandler(this); c_parser->setContentHandler(this); //c_parser->setFeature(XMLUni::fgSAX2CoreValidation,CoreValidation); c_parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, doNamespaces); c_parser->setFeature(XMLUni::fgXercesSchema, doSchema); c_parser->setFeature(XMLUni::fgXercesSchemaFullChecking, schemaFullChecking); c_parser->setFeature(XMLUni::fgXercesLoadExternalDTD, loadexternaldtd); std::endl; ###################### Classtest.cpp ##################### ....main.... char *xmlFile = strdup((arg.getParam(1).c_str())); //Set the parser to use. See class doc for more info string type = "sax"; XmlFactory xmlf(c_v ,c_d ,c_n ,c_s ,c_fs ,c_e); Xml *parser = xmlf.setParser(type); ...... Découvrez le nouveau Yahoo! Mail : 250 Mo d'espace de stockage pour vos mails ! Créez votre Yahoo! Mail sur http://fr.mail.yahoo.com/ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]