I found the problem, apparently. I had a declaration for "void startDocument();" but no actual code for it. Not really sure how the compiler let this get through but I created an empty function, recompiled and got no link errors. Thanks for your suggestions though.
On Tue, Jan 5, 2010 at 4:30 PM, David Bertoni <[email protected]> wrote: > On 1/4/2010 2:04 PM, Kelly Beard wrote: >> >> I'm changing some stuff around in my code and trying to use a SAX2 >> parser instead of the DOM one I was using before. I've done this >> before in a test program and a production one, but I'm getting some >> unresolved externals when I shouldn't be. I am creating a DOM >> document as a result of the XML that gets parsed on the front end. >> Can mixing the SAX2 and DOM stuff cause some clashes? It shouldn't >> because I'm doing it in a production program too. Anyway, this has me >> scratching my head a bit. >> >> I'm extending the DefaultHandler class. The doc says I can just >> redefine the pieces I want unless I'm writing a new parser which I'm >> not. >> >> #include<xercesc/sax2/DefaultHandler.hpp> >> >> ... >> >> class AuthNotifyHandler : public DefaultHandler { >> private : >> bool fSawErrors; >> multimap<int, string> errors; >> string elementData; >> string stationCode, stationDate, stationTime, startCode, poNum, >> msgID, track1, track2; >> >> public : >> void startDocument(); >> void endDocument(); >> void startElement(const XMLCh* const uri, const XMLCh* const >> localname, const XMLCh* const qname, const Attributes& attrs); >> void characters(const XMLCh *const chars, const unsigned int length); >> void endElement(const XMLCh *const uri, const XMLCh *const >> localname, const XMLCh *const qname); >> void error(const SAXParseException&exc); >> void fatalError(const SAXParseException&); >> void warning(const SAXParseException&exc); >> void resetErrors(); >> void addError(int code, string text); > > Did you mean to past this string parameter by value? > >> bool hasErrors() { return errors.size() != 0; } > > You might want to use errors.empty() here, instead of comparing with the > size. > >> multimap<int, string> getErrors() { return errors; } > > Did you mean to return a copy of the map? > >> >> string getStationCode() { return stationCode; } >> string getStationDate() { return stationDate; } >> string getStationTime() { return stationTime; } >> string getStartCode() { return startCode; } >> string getPONum() { return poNum; } >> string getTrack1() { return track1; } >> string getTrack2() { return track2; } >> string getMsgID() { return msgID; } >> }; >> >> >> Definition not found for symbol >> '__vft17AuthNotifyHandlerQ2_11xercesc_2_614EntityResolver'. >> Definition not found for symbol >> '__vft17AuthNotifyHandlerQ2_11xercesc_2_610DTDHandler'. >> Definition not found for symbol >> '__vft17AuthNotifyHandlerQ2_11xercesc_2_614ContentHandler'. >> Definition not found for symbol >> '__vft17AuthNotifyHandlerQ2_11xercesc_2_612ErrorHandler'. >> Definition not found for symbol >> '__vft17AuthNotifyHandlerQ2_11xercesc_2_614LexicalHandler'. >> Definition not found for symbol >> '__vft17AuthNotifyHandlerQ2_11xercesc_2_611DeclHandler'. >> > Depending on your compiler, you may need to define at least one "key" > function so the compiler emits the definitions for the virtual tables. What > happens if you declare and define a default constructor or the destructor in > a source file? > > Dave > -- Kelly Beard
