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

V

Vinu

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
 
T

titancipher

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

Vinu

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
 
T

titancipher

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

Jim Langston

Vinu said:
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();
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top