Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   error Message: "only const static integral data members can be initializedinside a class or struct" (http://www.velocityreviews.com/forums/t446814-error-message-only-const-static-integral-data-members-can-be-initializedinside-a-class-or-struct.html)

Susan Baker 07-03-2005 11:43 AM

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?



John Carson 07-03-2005 12:14 PM

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
> 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?


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


Alf P. Steinbach 07-03-2005 12:29 PM

Re: error Message: "only const static integral data members can be initialized inside a class or struct"
 
* Susan Baker:
>
> 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?


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?


All times are GMT. The time now is 02:26 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.