xServices::CServices<TImp>::StHoldClientList::StHoldClientList(std::set<TImp*, std::less<TImp*>, std

Discussion in 'C++' started by Vinu, Jul 6, 2005.

  1. Vinu

    Vinu Guest

    Hi
    I am facing a problem in compilation the error is like this

    In constructor
    xServices::CServices<TImp>::StHoldClientList::StHoldClientList(std::set<TImp*,
    std::less<TImp*>, std::allocator<TImp*> >&)':
    : error: expected `;' before "pos"
    : error: `pos' undeclared (first use this function)
    : error: (Each undeclared identifier is reported only once for each
    function it appears in.)
    : In destructor
    `xServices::CServices<TImp>::StHoldClientList::~StHoldClientList()':
    : error: expected `;' before "pos"
    : error: `pos' undeclared (first use this function)


    Source Code:

    namespace xServices
    {

    template <class TImp>
    class CServices
    {
    protected:
    typedef typename std::set<TImp*> ServiceList;
    typedef typename ServiceList::iterator ServiceIterator;
    ServiceList m_list;
    struct StHoldClientList
    {
    StHoldClientList(ServiceList& clients)
    : m_clients(clients)
    {
    for (CServices::ServiceIterator pos = m_clients.begin(); pos !=
    m_clients.end(); ++pos)
    (*pos)->AddRef();
    }
    ~StHoldClientList()
    {
    for (CServices::ServiceIterator pos = m_clients.begin(); pos !=
    m_clients.end(); ++pos)
    (*pos++)->Release();
    }
    ServiceList& m_clients;
    };
    friend struct StHoldClientList;
    };
    }


    Can u help me to solve this error.
    Can you suggest standard way of doing it on Sun Solaris Sparc? We are
    using gcc 3.4.2 .


    Thanks
    Vinu
     
    Vinu, Jul 6, 2005
    #1
    1. Advertising

  2. Vinu

    titancipher Guest

    Try moving the declaration of the ServiceIterator pos out of the
    for-loop.

    Incidentally, check your destructor, it appears you may be incrementing
    'pos' twice, once in the Release, and once for each loop.
     
    titancipher, Jul 6, 2005
    #2
    1. Advertising

  3. Vinu

    Vinu Guest

    I tried the for - loop option what u specified but still it is giving
    error and ur next suggestion ,I think it will not affect at compilation


    Thanks
    Vinu
     
    Vinu, Jul 6, 2005
    #3
  4. Vinu

    titancipher Guest

    It compiles with gcc, so I am not certain what your error is. It may
    be the sun compiler. Try changing ServiceIterator to:

    std::set<TImp*>::iterator pos

    Also, yes, the pos increment would be a run-time memory leak, not a
    compilation problem.
     
    titancipher, Jul 6, 2005
    #4
  5. Vinu

    Jim Langston Guest

    "Vinu" <> wrote in message
    news:...
    > Hi
    > I am facing a problem in compilation the error is like this
    >
    > In constructor
    > xServices::CServices<TImp>::StHoldClientList::StHoldClientList(std::set<TImp*,
    > std::less<TImp*>, std::allocator<TImp*> >&)':
    > : error: expected `;' before "pos"
    > : error: `pos' undeclared (first use this function)
    > : error: (Each undeclared identifier is reported only once for each
    > function it appears in.)
    > : In destructor
    > `xServices::CServices<TImp>::StHoldClientList::~StHoldClientList()':
    > : error: expected `;' before "pos"
    > : error: `pos' undeclared (first use this function)
    >
    >
    > Source Code:
    >
    > namespace xServices
    > {
    >
    > template <class TImp>
    > class CServices
    > {
    > protected:
    > typedef typename std::set<TImp*> ServiceList;
    > typedef typename ServiceList::iterator ServiceIterator;
    > ServiceList m_list;
    > struct StHoldClientList
    > {
    > StHoldClientList(ServiceList& clients)
    > : m_clients(clients)
    > {
    > for (CServices::ServiceIterator pos = m_clients.begin(); pos !=
    > m_clients.end(); ++pos)
    > (*pos)->AddRef();
    > }
    > ~StHoldClientList()
    > {
    > for (CServices::ServiceIterator pos = m_clients.begin(); pos !=
    > m_clients.end(); ++pos)
    > (*pos++)->Release();
    > }
    > ServiceList& m_clients;
    > };
    > friend struct StHoldClientList;
    > };
    > }
    >
    >
    > Can u help me to solve this error.
    > Can you suggest standard way of doing it on Sun Solaris Sparc? We are
    > using gcc 3.4.2 .
    >
    >
    > Thanks
    > Vinu


    try this:

    CServices::ServiceIterator pos;
    for (pos = m_clients.begin(); pos != m_clients.end(); ++pos)
    (*pos)->AddRef();
     
    Jim Langston, Jul 7, 2005
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Vinu
    Replies:
    0
    Views:
    368
  2. Cory Nelson
    Replies:
    16
    Views:
    1,184
    red floyd
    Aug 4, 2006
  3. jiajia wu
    Replies:
    0
    Views:
    373
    jiajia wu
    Oct 1, 2009
  4. 6668
    Replies:
    0
    Views:
    165
  5. lllll
    Replies:
    0
    Views:
    152
    lllll
    Jun 8, 2009
Loading...

Share This Page