declaring constants in classes

Hello,

I'm currently porting C++ program from unix to NT and discover the following problem.

With gcc one can declare and initialize a constant value in a class. Apparently VC++ does not allow this.

class foo {
   const int val = 5;
}

This makes VC++ complain.
How do we define class dependent constants with VC++ ?
What is the standard behaviour ?
LVL 1
meessenAsked:
Who is Participating?
 
nietodConnect With a Mentor Commented:
the ability to declare and initalize a constant in a class was added to the standard, but is not supported by VC yet.
0
 
nietodCommented:
in the meantime, you can use an enum like

class foo {
      enumt valType { val = 5};
   };

or you can use a static constant like

class foo {
      static const int val;
   }

const int foo::val = 5;
0
 
Answers2000Commented:
You beat me to it nietod (just), oh well  a comment

class foo
{
enum
{
 val1 = 5 ;
} ;

//or

static const int val2 ;

}  ;

// then a .cpp
const int foor::val2 = 5 ;


I have read the gcc option is allowable but a recent addition to ANSI/ISO C++, so presumably a version of VC will eventually fix this.  Lot's of compilers currently barf on the const int declarations in a class


0
Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

 
midniteliteCommented:
since in VC you can't initial a constant, you can initial in the Constructor like in the following.  This is appropiate and should be used.



    class foo {
       // const int val = 5;
    }
    // put constant value in constructor.
    foo::foo()
    {
       const int val = 5;
    }


0
 
nietodCommented:
that creates a constant that is local to the constructor procedure.  That is not what he wants.  You can declare a constant int member to the class and initialize it in the constructor.  however that is a waste of space as each object will store its own copy of this int.  That is why I suggested using a static int.
0
 
meessenAuthor Commented:
Ok nietod get the points though I used Answers2000 form:

enum { val = 5 };

I hope VC updates it's compiler really soon.
We have very programs here such constants are used everywhere !
0
 
nietodCommented:
(I also proposed that solution, although I did not use an annonymous enum.)

>>I hope VC updates it's compiler really soon
they produce updates about every 12 to 18 months.  Last one was about 6 months ago...
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.