简体   繁体   中英

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 anyone 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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM