tiemann@SUN.COM (Michael Tiemann) (09/19/89)
I guess this reply implies that GNU C++ is not a present compiler.... Try this, but don't try it at home :-) This will compile and run under GNU C++ 1.36.0. JTYMLTK. #include <stdio.h> typedef char* cstring; // re first question: // Unfortunately, your reasonable request still does not seem to be supported // by C++ compilers. You should be able to meet your needs by declaring // a constant static class member, and defining an initial value for it. // But present compilers will not allow you to give it an initial value until // after the class declaration, and will not accept a class declaration with // an array size whose bounds are not known at class declaration time. // What today's C++ compilers should be willing to accept, but won't: //**** This is ugly. I'm glad GNU C++ does not accept this!! // // class cstringstack; // // static const int cstringstack::maxStackSize = 100; ?!?!?!? // // class cstringstack // { // static const int maxStackSize; ?!?!?!? // cstring element[maxStackSize]; // int top; // public: // cstringstack(): top(0) {} // void push(const cstring s){element[top++] = s;} // cstring pop(){return element[--top];} // cstringstack& popprint(){printf("%s\n",this->pop()); return *this;} // }; // Or maybe they should accept: //**** This is even worse! I'm glad GNU C++ does not accept this either!! // // class cstringstack // { // static const int maxStackSize; // cstring element[maxStackSize]; ?!?!?!? // int top; // public: // cstringstack(): top(0) {} // void push(const cstring s){element[top++] = s;} // cstring pop(){return element[--top];} // cstringstack& popprint(){printf("%s\n",this->pop()); return *this;} // }; // // static const int cstringstack::maxStackSize = 100; ?!?!?!? // the best you can do with today's compilers: //**** This works with GNU C++, but is boring // static const int cstringstack__maxStackSize = 100; // class cstringstack // { // cstring element[cstringstack__maxStackSize]; // int top; // public: // cstringstack(): top(0) {} // void push(const cstring s){element[top++] = s;} // cstring pop(){return element[--top];} // cstringstack& popprint(){printf("%s\n",this->pop()); return *this;} // }; //*** How about this: class cstringstack { const int maxStackSize = 100; cstring element[maxStackSize]; int top; public: cstringstack(): top(0) {} void push(const cstring s){element[top++] = s;} cstring pop(){return element[--top];} cstringstack& popprint(){printf("%s\n",this->pop()); return *this;} }; void main() { cstringstack stk; stk.push("hi mom"); stk.push("hello dad"); stk.push("bye world"); stk.popprint().popprint().popprint(); }