Connecting Tech Pros Worldwide Help | Site Map

error Message: "only const static integral data members can be initializedinside a class or struct"

 
LinkBack Thread Tools Search this Thread
  #1  
Old July 23rd, 2005, 05:49 AM
Susan Baker
Guest
 
Posts: n/a
Default error Message: "only const static integral data members can be initializedinside a class or struct"

Hi,

I got this error msg whilst building some classes. It is realatively asy
to fix. But I just wondered, does anyone know the technical reason why
one can't initialiaze a const static non-integral data member in a class?



  #2  
Old July 23rd, 2005, 05:49 AM
John Carson
Guest
 
Posts: n/a
Default Re: error Message: "only const static integral data members can be initialized inside a class or struct"

"Susan Baker" <sbaker@no.spam.net> wrote in message
news:da8j1a$alj$1@nwrdmz02.dmz.ncs.ea.ibs-infra.bt.com[color=blue]
> Hi,
>
> I got this error msg whilst building some classes. It is realatively
> asy to fix. But I just wondered, does anyone know the technical
> reason why one can't initialiaze a const static non-integral data
> member in a class?[/color]

1. Because the C++ standard says so.
2. Because being able to do this with integral types means they can be used
where compile time constants are required, notably in specifying the size of
arrays in the class declaration. There isn't a comparable need for the
initialisation of other const static types.

--
John Carson

  #3  
Old July 23rd, 2005, 05:49 AM
Alf P. Steinbach
Guest
 
Posts: n/a
Default Re: error Message: "only const static integral data members can be initialized inside a class or struct"

* Susan Baker:[color=blue]
>
> I got this error msg whilst building some classes. It is realatively asy
> to fix. But I just wondered, does anyone know the technical reason why
> one can't initialiaze a const static non-integral data member in a class?[/color]

No. :-)

But apparently, from earlier discussions, adding support for that would
have opened a can'o'worms, other related issues to be considered.

The support that is there, for integral type constants, allows those
constants to be used as template arguments and as array size specifiers.
A double (say) constant cannot be used that way. So it seems the
committee chose to add only the minimal support absolutely required for
the most common compile time usage.

Btw., "relatively easy to fix", in the sense of finding some
work-around, isn't necessarily true, because C++ doesn't support
'inline' for constants, i.e. you cannot just use the keyword 'inline' to
make a constant definition have external linkage in a way so the that
the linker is happy with multiple definitions.

One workaround for that is to use templating, and that makes the
restriction very difficult to understand: the templating work-around
shows that it would not entail anything extra in compiler and linker
machinery to support 'inline' for this purpose.

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
 

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Popular Articles

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over 220,989 network members.