c++ - macro
- Roland (32/32) Apr 05 2002 i have the macro:
- Walter (3/35) Apr 05 2002 Looks like the trouble is that (int looks like the start of a cast.
- Jan Knepper (6/38) Apr 05 2002 Roland, have you tried it as:
- Roland (4/9) Apr 06 2002 okay, it seem to work (it compiles) !
i have the macro: #define __OPEQVAL(val,op) ( int i; for (i=0; i<DIM; i++) coord[i] op val; return *this ) and the class: template <class T, int DIM> class npoint { public: . . npoint<T,DIM>& operator+=(const T a) { __OPEQVAL(a,+=); //<----- here } . . public: T coord[DIM]; }; does not compile: "identifier found in abstract declarator." if i write like below, it compiles: npoint<T,DIM>& operator+=(const T a) { int i; for (i=0; i<DIM; i++) coord[i] += a; return *this; //same but macro expanded } my questions: - is it suposed to compile ?, if not, in few word why ? (just for my general culture) - do i missed something, is there a way to make it compile ? (I hate cut and past code, write more than once similar code. i can't calculate how much time i lost trying to go faster) thanks roland
Apr 05 2002
Looks like the trouble is that (int looks like the start of a cast. "Roland" <rv ronetech.com> wrote in message news:3CAD70CD.643A290C ronetech.com...i have the macro: #define __OPEQVAL(val,op) ( int i; for (i=0; i<DIM; i++) coord[i] op val; return *this ) and the class: template <class T, int DIM> class npoint { public: . . npoint<T,DIM>& operator+=(const T a) { __OPEQVAL(a,+=); //<----- here } . . public: T coord[DIM]; }; does not compile: "identifier found in abstract declarator." if i write like below, it compiles: npoint<T,DIM>& operator+=(const T a) { int i; for (i=0; i<DIM; i++) coord[i] += a; return *this; //same but macro expanded } my questions: - is it suposed to compile ?, if not, in few word why ? (just for my general culture) - do i missed something, is there a way to make it compile ? (I hate cut and past code, write more than once similar code. i can't calculate how much time i lost trying to go faster) thanks roland
Apr 05 2002
Roland, have you tried it as: #define __OPEQVAL(val,op) { int i; for (i=0; i<DIM; i++) coord[i] op val; return *this; } i.e {} instead of ()? Jan Roland wrote:i have the macro: #define __OPEQVAL(val,op) ( int i; for (i=0; i<DIM; i++) coord[i] op val; return *this ) and the class: template <class T, int DIM> class npoint { public: . . npoint<T,DIM>& operator+=(const T a) { __OPEQVAL(a,+=); //<----- here } . . public: T coord[DIM]; }; does not compile: "identifier found in abstract declarator." if i write like below, it compiles: npoint<T,DIM>& operator+=(const T a) { int i; for (i=0; i<DIM; i++) coord[i] += a; return *this; //same but macro expanded } my questions: - is it suposed to compile ?, if not, in few word why ? (just for my general culture) - do i missed something, is there a way to make it compile ? (I hate cut and past code, write more than once similar code. i can't calculate how much time i lost trying to go faster) thanks roland
Apr 05 2002