IP with C++ problem

Chris Johns cjohns at cybertec.com.au
Fri Sep 14 13:00:53 UTC 2001


"Andrew N. Maximov" wrote:
> 
> Hello rtems-users,
> 
> There is a problem while using network in C++.
> When I attempt to compile this example
> /*****************************************/
> #include <sys/types.h>
> #include <sys/socket.h>
> #include <sys/sockio.h>
> #include <net/if.h>
> #include <netinet/in.h>
> /*****************************************/
> gcc produces an error:
> netinet/in.h:282: ANSI C++ forbids data member `ip_opts' with same name as enclosing class
> 
> The problem is in the netinet/in.h file.
> The structure ip_opts is declared as
> 
> struct ip_opts {
>         struct  in_addr ip_dst;         /* first hop, 0 w/o src rt */
>         char    ip_opts[40];            /* actually variable in size */
> };
> 
> The name and the member of structure
> have an identical name "ip_opts".
> 
> Whether this problem will be being solved?
> 

You have found a "feature" in gcc where this error is suppressed for
system includes. This is why C++ works fine on FreeBSD. Ralf provided an
excellent solution to this problem back on 19 Dec 2000 under a mail
thread called "RTEMS + g++ + #include <netinet/in.h>". I suggest you
search the archive for the thread. Here is the solution Ralf provided :

 > For now, all RTEMS headers (=RTEMS system headers) have to be
 > installed to $(prefix)/<BSP>/lib/include.
 > I.e. -isystem $(prefix)/<BSP>/lib/include or -B$(prefix)/<BSP>/lib/
 > has to be _prepended_ to the compile command if using gcc. 
 > If using 3rd party compilers, you will probably have a hard time
 > getting this working at all.

-- 
 Chris Johns, cjohns @ cybertec.com.au



More information about the users mailing list