From: William S F. <ws...@fu...> - 2006-11-08 19:56:15
|
Dave Ludwig wrote: > Dave Ludwig wrote: >> I have the following items in my C++ header file: >> ... >> class LocalResource >> { >> public: >> LocalResource () : m_pResource (NULL) {} >> virtual ~LocalResource () {} >> ... >> }; >> typedef vector<LocalResource *> LocalResources; >> typedef Iterator<LocalResources::iterator> LocalResourceIterator; >> typedef shared_ptr<LocalResourceIterator> LocalResourceIteratorSP; >> ... >> >> I am able to instantiate an instance of LocalResource in Java, but I >> am unable to instatiate an instance of LocalResourceIteratorSP. It >> seems that LocalResourceIteratorSP is not part of the SWIG output. I >> tried adding these lines to the input file: >> %{ >> typedef vector<LocalResource *> LocalResources; >> typedef Iterator<LocalResources::iterator> LocalResourceIterator; >> typedef shared_ptr<LocalResourceIterator> LocalResourceIteratorSP; >> %} >> >> but all I get from that is an "undeclared identifier" error for >> LocalResource when I try to compile my C++ file with the new _wrap file. >> >> Basically I am trying to mimic the following C++ sample code in Java. >> LocalResourceIteratorSP resIter = GetLocalResourceIterator (); >> while (resIter->IsDone () == false) >> { >> LocalResource *pLocalRes = resIter->Item (); >> LogItem (" Name = %s", pLocalRes->GetName ().c_str ()); >> LogItem (" Description = %s", pLocalRes->GetDesc ().c_str ()); >> LogItem (" Type = %s", pLocalRes->GetType ().c_str ()); >> >> resIter->MoveNext (); >> } >> >> Thanks! >> > An update on my situation. I realized that the reason I was getting > "undeclared identifier" errors was because I didn't use the namespace in > my typedef. > I changed: > %{ > typedef vector<LocalResource *> LocalResources; > typedef Iterator<LocalResources::iterator> LocalResourceIterator; > typedef shared_ptr<LocalResourceIterator> LocalResourceIteratorSP; > %} > to > %{ > typedef vector<*MpeApp::*LocalResource *> LocalResources; > typedef Iterator<LocalResources::iterator> LocalResourceIterator; > typedef shared_ptr<LocalResourceIterator> LocalResourceIteratorSP; > %} > and that got rid of the errors and my C++ app compiles now. > > However, I still can't instantiate LocalResourceIteratorSP from Java, so > any help on that would be greatly appreciated. The whole C++ app hinges > on this iterator concept so without it I'm dead in the water. > You instantiate LocalResourceIteratorSP by calling GetLocalResourceIterator() as you show - yes? Then just call this method. Read up about SWIG's handling of smart pointers. I don't see any %template in your code for the templated shared_ptr. William |