Javier Gálvez Guerrero wrote:
I have just created my main method. I am creating the "parser" class in my
project, so this is not the final project yet. I create a class and test it
with a corresponding main when I have compiled without errors (well, with
the only one that there is no main). Now there are 8 errors (with the main
defined).

See the quoted text, please.

2007/11/29, Alberto Massari <[EMAIL PROTECTED]>:
[...]
Ventana Resultados

Vinculando...
contents_manager.obj : warning LNK4248: símbolo (token) de typeref sin
resolver (01000019) para 'xercesc_2_8.XMLValidator'; no se puede
ejecutar la imagen
contents_manager.obj : warning LNK4248: símbolo (token) de typeref sin
resolver (0100001A) para 'xercesc_2_8.XMLGrammarPool'; no se puede
ejecutar la imagen
I guess you meant writing xercesc_2_8::XMLGrammarPool (i.e. "::" instead
of ".")
I have only copied what the Visual C++ 2005 has given as an output when
compiling the project. It appears xercesc_2.8.XMLGrammarPool, dot and not a
colon. Actually, I have not used this on my project. I've only created a
parser and worked with the DOMNode API:

In this case it could be caused by the various "using namespace" directives, that under /clr have a different separator. I think the only way you have to fix this is by removing the XERCES_CPP_NAMESPACE_USE and add a XERCES_CPP_NAMESPACE_QUALIFIER before any Xerces class (like in XERCES_CPP_NAMESPACE_QUALIFIER XMLPlatformUtils::Initialize(); )
// contents_manager.cpp

#include "../include/gincludes.h"
#include "contents_manager.h"

//...

void contents_manager::load_guide(string xml_path){

    XMLPlatformUtils::Initialize();
    XercesDOMParser* parser = new XercesDOMParser();

    parser->parse(xml_path.c_str());
    DOMNode* root = parser->getDocument();
    DOMNode* child_aux1, *child_aux2, *child_aux3, *child_aux4, *child_aux5,
*child_aux6, *child_aux7;

    // Check that the XML file defines the content guide
    if(XMLString::transcode(root->getNodeName()) == "contents"){
Beware, this test is wrong; transcode returns a pointer, so you are comparing two pointers, and not two strings. Either use strcmp, or XMLString::equals, or build two std::string objects. And don't forget to call XMLString::release on the pointer returned by transcode, or you'll leak memory.
        for(child_aux1 = root->getFirstChild(); child_aux1 != NULL;
child_aux1 = child_aux1->getNextSibling()){
            char* child1_name =
XMLString::transcode(child_aux1->getNodeName());
//...

    delete parser;

    XMLPlatformUtils::Terminate();
}

That is the only I have done in my class regarding Xerces. In the header
file I have included these:


//contents_manager.h

#include "../include/gincludes.h"
#include "../content/content.h"
#include <xercesc/dom/DOM.hpp>
#include <xercesc/dom/DOMImplementation.hpp>
#include <xercesc/dom/DOMImplementationLS.hpp>
#include <xercesc/dom/DOMWriter.hpp>
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/sax/HandlerBase.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/util/PlatformUtils.hpp>

using namespace System;
using namespace System::Runtime::InteropServices;
using namespace std;

XERCES_CPP_NAMESPACE_USE

class contents_manager {
//...


So that's all.
Sorry, I extracted the wrong symbol from the spanish description: it complains that contents_manager::get_content is using two constructors for the "content" class that cannot be found,content::content(std::string) and content::content(void). Double check if you have implemented them, or just declared in the header file.

Alberto

Reply via email to