C++ / Qt Coding style - where should a #define go

c++, constants, qgraphicsitem, qt

Solution

Why not just use `Type` instead of 3? `enum`s in c++ are implicitly convertible to `int`

If you really wanted a new name instead, I suggest you use a `const int` variable instead of a `#define` -- it is type and namespace safe, while preprocessor macros aren't.

Something like:

class Brick : public QGraphicsItem
{
  static const int BRICK_SPRITE = 3;
  // rest of the class definition
};

According to the documentations I could find, the approach you are taking with the enum and overriding `type()` is indeed the preferred way

Problem

I am trying to build a break-out game clone in `Qt`. I need to figure out what type of a `QGraphicsItem` my ball collided with. For example if I the ball collides with the wall, the ball just bounces off, if it collides with a brick it has to bounce off and destroys the brick. To find out what kind of `QGraphicsItem` it is, I figured the best way to do that is probably to override `QGraphicsItem::type()` (Please let me know if this is not the right way!). In the following code for `brick.h` I set my 'Brick' to have a Type of 3. Now, the value 3 looks really cumbersome to track. I would instead prefer to declare something with a '#define' ``` #include <QGraphicsItem> //should this #define be here? //#define BRICK_SPRITE 3 class Brick : public QGraphicsItem { public: Brick(const QPixmap& p, QGraphicsScene *scene = 0); virtual QRectF boundingRect() const; virtual void paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget ); QPainterPath shape() const; enum { Type = 3 }; //enum {Type = BRICK_SPRITE} int type() const { return Type; } private: QPixmap pixmap; }; ``` Where is a good location to place the statement '#define BRICK_SPRITE 3' ? I have several other files in the project. Should I place all the definitions in a separate header file?

Original source

Related problems