C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Porting code, need guidance, Thx

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ Language (Moderated)
View previous topic :: View next topic  
Author Message
Kenton Groombridge
Guest





PostPosted: Sat Aug 14, 2004 6:36 am    Post subject: Porting code, need guidance, Thx Reply with quote




Hi,
I previous posted this in a gcc and g++ groups since that is the
compiler I am working with, but I didn't get any response.

Hopefully these are the right groups for this question. I am working
(actually playing) on porting Alien vs Predator to Linux. I am using
the code that is available via CVS from icculus.org.

I recently upgraded my gcc to 3.4.1 and now a portion of the code
doesn't compile. Nothing in the code has changed.

I think I figured it out, but want to be sure before I spend a bunch of
time working around it only to find that I was wrong.

My guess is the class ConstIterator makes class Iterator a friend, but
class Iterator is a derived class of the bass class ConstIterator (hope
I said that right). From what I understand and have researched is that
in order for the class ConstIterator to use the class Iterator as a
friend, then class Iterator has to be defined first, and for class
Iterator to be derived from class ConstIterator, then the class
ConstIterator has to be defined first. Essentially a catch 22.

Am I on the right track? If not please point me in the right directly,
but I would like to fix the code. I would like to know how you would
approach the fix for this.

Thanks,
Ken

Here is the error:

g++ -g -Wall -pipe -O2 -DLINUX -Dengine=1 -I. -Iinclude -Iwin95 -Iavp
-Iavp/win95 -Iavp/support -Iavp/win95/frontend -Iavp/win95/gadgets
-I/usr/include/SDL -D_REENTRANT -c -o win95/awtexld.o win95/awtexld.cpp
In file included from win95/awtexld.cpp:10:
win95/hash_tem.hpp: In member function `void _base_HashTable<TYPE,
ARG_TYPE, CMP_ARG_TYPE>::Iterator::Remove()':
win95/hash_tem.hpp:435: error: `nEntriesRemaining' undeclared (first use
this function)
win95/hash_tem.hpp:435: error: (Each undeclared identifier is reported
only once for each function it appears in.)
win95/hash_tem.hpp:439: error: `nodePP' undeclared (first use this function)
win95/hash_tem.hpp:446: error: `chainPP' undeclared (first use this
function)
win95/hash_tem.hpp:447: error: `nChainsRemaining' undeclared (first use
this function)
win95/hash_tem.hpp: In copy constructor `_base_HashTable<TYPE, ARG_TYPE,
CMP_ARG_TYPE>::_base_HashTable(const _base_HashTable<TYPE, ARG_TYPE,
CMP_ARG_TYPE>&)':
win95/hash_tem.hpp:705: error: expected `;' before "it"
win95/hash_tem.hpp:705: error: `it' undeclared (first use this function)
make: *** [win95/awtexld.o] Error 1

Here is the code in question (not very big, but put in this format so
you can find the lines in question in relation to the errors above):

http://webpages.charter.net/kgroombr/hash_tem.hpp


[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]

[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.jamesd.demon.co.uk/csc/faq.html ]


Back to top
Ben Hutchings
Guest





PostPosted: Sat Aug 14, 2004 1:31 pm    Post subject: Re: Porting code, need guidance, Thx Reply with quote



Kenton Groombridge wrote:
<snip>
Quote:
I recently upgraded my gcc to 3.4.1 and now a portion of the code
doesn't compile. Nothing in the code has changed.

I think I figured it out, but want to be sure before I spend a bunch of
time working around it only to find that I was wrong.

My guess is the class ConstIterator makes class Iterator a friend, but
class Iterator is a derived class of the bass class ConstIterator (hope
I said that right). From what I understand and have researched is that
in order for the class ConstIterator to use the class Iterator as a
friend, then class Iterator has to be defined first, and for class
Iterator to be derived from class ConstIterator, then the class
ConstIterator has to be defined first. Essentially a catch 22.

That is a problem, but not the problem that's being reported.

Quote:
Am I on the right track? If not please point me in the right directly,
but I would like to fix the code. I would like to know how you would
approach the fix for this.
snip


I would be inclined to make ConstIterator's member variables
protected. This is not generally a good idea, but I wouldn't want to
go making more drastic changes to the existing code. See
<http://www.parashift.com/c++-faq-lite/basics-of-inheritance.html#faq-19.8>.

I think the errors reported by the compiler are the result of the
change in binding of names in templates that was made in version 3.4
of GNU C++. (The change was made in the standard long ago.) See
<http://www.decadentplace.org.uk/womble/cplusplus/template-faq.html#base-lookup>.
Given this, they can be fixed by adding "this->" before the names of
the inherited member variables in the Iterator class. The FAQ I
linked to explains why.

[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]

Back to top
llewelly
Guest





PostPosted: Mon Aug 16, 2004 7:56 pm    Post subject: Re: Porting code, need guidance, Thx Reply with quote




Kenton Groombridge <kgroombr (AT) REMOVEMEcharter (DOT) net> writes:

Quote:
Hi,
I previous posted this in a gcc and g++ groups since that is the
compiler I am working with, but I didn't get any response.

Hopefully these are the right groups for this question. I am working
(actually playing) on porting Alien vs Predator to Linux. I am using
the code that is available via CVS from icculus.org.

I recently upgraded my gcc to 3.4.1 and now a portion of the code
doesn't compile. Nothing in the code has changed.

g++ 3.4 implements two-phase lookup as required by the 1998
standard. That makes it in some degree source-code incompatible
with g++ 3.x .

You can find examples on the gcc website; see the 'C++' section of:
http://gcc.gnu.org/gcc-3.4/changes.html

Quote:
I think I figured it out, but want to be sure before I spend a bunch of
time working around it only to find that I was wrong.

My guess is the class ConstIterator makes class Iterator a friend,

This is true but irrevelant. Friendship affects access control, not
namelookup. No declaration for 'nEntriesRemaining' is found,
therefor the issue is namelookup. This is in fact akin to one of
the examples on the gcc 3.4 changes page I linked to above.

Quote:
but
class Iterator is a derived class of the bass class ConstIterator (hope
I said that right).

Correct.

Quote:
From what I understand and have researched is that
in order for the class ConstIterator to use the class Iterator as a
friend, then class Iterator has to be defined first,

A definition is *not* necessary. Only a forward declaration is
necessary - and in some cases the friend declaration itself can
fulfill this purpose. But the whole friend issue is irrevelant.

Quote:
and for class
Iterator to be derived from class ConstIterator, then the class
ConstIterator has to be defined first.

True.

Quote:
Essentially a catch 22.

No, becuase declaring something friend does not require a definition
- but, as I said before, the whole friend issue is irrevelant.

[snip]
Quote:
I would like to know how you would
approach the fix for this.
[snip]


Replace 'nEntriesRemaining' whith 'this->nEntriesRemaining'.

The Vandervoode and Josuttis _C++ Templates_ book has a section on
dependent names which I think explains why this works.


[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]

[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.jamesd.demon.co.uk/csc/faq.html ]


Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ Language (Moderated) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.