c++/Parsing: error: expected primary-expression before '->' token .how to solve this error..?
I am new to c++/parsing, I convert the xsd file into an auto generated cpp and header file. When I try to access the element (member functions) of the xml file (xmlfilename) I am getting the error "Primary-expression missing before'->' token".
My code:
#include "IMACSMsgHeaderType.h"
#include<iostream>
#include<string>
#include <memory>
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
using namespace std;
using namespace SelfTest;
int main()
{
try{
::std::auto_ptr< ::SelfTest::MH > xsd (::SelfTest::MH_ ("bala.xml",::xml_schema::flags::dont_validate));
}
catch(const xml_schema::exception& e)
{
cerr<<e.what()<<endl;
}
cout<<xsd->n();
return 1;
}
complier output:
vmware@LSS01:~/Desktop/private> make
g++ -c test_classParsing.cpp
test_classParsing.cpp: In function ‘int main()’:
test_classParsing.cpp:26: error: expected primary-expression before ‘->’ token
make: *** [.o] Error 1
Can anyo开发者_如何学Pythonne explain what is the Primary expression error? and how can I solve this?
More details:
#include <memory>
#include <algorithm>
#include <xsd/cxx/tree/exceptions.hxx>
#include <xsd/cxx/tree/elements.hxx>
#include <xsd/cxx/tree/containers.hxx>
#include <xsd/cxx/tree/list.hxx>
#include <xsd/cxx/xml/dom/parsing-header.hxx>
#include "IMACSTypes.h"
#include<iosfwd>
#include<xercesc/dom/DOMDocument.hpp>
#include<xercesc/dom/DOMErrorHandler.hpp>
#include<xercesc/framework/XMLFormatter.hpp>
#include<xsd/cxx/xml/dom/auto-ptr.hxx>
namespace SelfTest
{
class MH: public ::xml_schema::type
{
public:
// hdrSize
//
typedef ::xml_schema::unsigned_int hdrSize_type;
typedef ::xsd::cxx::tree::optional< hdrSize_type > hdrSize_optional;
typedef ::xsd::cxx::tree::traits< hdrSize_type, char > hdrSize_traits;
const hdrSize_optional&
hdrSize () const;
hdrSize_optional&
hdrSize ();
void
hdrSize (const hdrSize_type& x);
void
hdrSize (const hdrSize_optional& x);
// a
//
typedef ::SelfTest::MessageIDType a_type;
typedef ::xsd::cxx::tree::traits< a_type, char > a_traits;
const a_type&
a () const;
a_type&
a ();
void
a (const a_type& x);
void
a (::std::auto_ptr< a_type > p);
// b
//
typedef ::SelfTest::DestinationType b_type;
typedef ::xsd::cxx::tree::traits< b_type, char > b_traits;
const b_type&
b () const;
b_type&
b ();
void
b (const b_type& x);
void
b (::std::auto_ptr< b_type > p);
// n
//
typedef ::xml_schema::string n_type;
typedef ::xsd::cxx::tree::traits< n_type, char > n_traits;
const n_type&
n () const;
n_type&
n ();
void
n (const n_type& x);
void
n (::std::auto_ptr< n_type > p);
// Constructors.
MH (const a_type&,
const b_type&,
const n_type&,
);
MH (const ::xercesc::DOMElement& e,
::xml_schema::flags f = 0,
::xml_schema::container* c = 0);
MH (const MH& x,
::xml_schema::flags f = 0,
::xml_schema::container* c = 0);
virtual MH*
_clone (::xml_schema::flags f = 0,
::xml_schema::container* c = 0) const;
virtual
~MH ();
// Implementation.
//
protected:
void
parse (::xsd::cxx::xml::dom::parser< char >&,
::xml_schema::flags);
protected:
hdrSize_optional hdrSize_;
::xsd::cxx::tree::one< a_type > a_;
::xsd::cxx::tree::one< b_type > b_;
::xsd::cxx::tree::one< n_type > n_;
};
::std::auto_ptr< ::SelfTest::MH >
MH_ (const ::std::string& uri, ::xml_schema::flags f = 0,const ::xml_schema::properties& p = ::xml_schema::properties ());
}
i have no idea where i am wrong pls some one guide me..Thanks in advance
I'd be willing to bet that's not the only error you got. Always work on your compiler errors starting with the first error in the list; subsequent errors might just be side effects of an earlier error.
In this case, the compiler apparently doesn't know what xsd
is on the line you've highlighted. That suggests that the compiler also had a problem with the declaration of xsd
, so focus your attention on the compiler error reported for that line instead. Keep in mind that the actual error might be even earlier, such as a forgotten semicolon on the line before the xsd
declaration. Or maybe the compiler doesn't recognize one of the types you mentioned on that line. The auto_ptr
class comes from the memory header; did you include that? Maybe you omitted the underscore when you mentioned MH
as the auto_ptr
type parameter.
Your xsd
goes out of scope when you leave the try block. Try moving the cout
into try like this:
int main()
{
try
{
std::auto_ptr< SelfTest::MH >
xsd( SelfTest::MH_("bala.xml", xml_schema::flags::dont_validate) );
cout << xsd->n();
}
catch(const xml_schema::exception& e)
{
cerr << e.what() << endl;
}
return 0;
}
The operations of auto_ptr are guaranteed not to throw. So alternatively you can do this as well if you want to limit the scope of your try block:
int main()
{
std::auto_ptr< SelfTest::MH > xsd;
try
{
xsd.reset( SelfTest::MH_("bala.xml", xml_schema::flags::dont_validate) );
}
catch(const xml_schema::exception& e)
{
cerr << e.what() << endl;
}
if( xsd.get() )
cout << xsd->n();
return 0;
}
Note, your main
should return 0 if there's no error.
精彩评论