C ++宏不起作用

时间:2014-12-04 17:42:24

标签: c++ macros

我定义的宏功能似乎不起作用。

  

main.cpp:22:3:错误:未知类型名称'a'
    a * app = new a;
   ^
  main.cpp:22:16:错误:未知类型名称'a'
    a * app = new a;
                 ^

以下是更多源代码:

#include <iostream>

#include "monster.h"
#define DECLARE_MAIN(a)

class game : public monster::app {
  void init()
  {
  }
  void startup()
  {
  }
  void render(double currentTime)
  {
  }
};

DECLARE_MAIN(game)

int main(int argc, const char ** argv)
{
  a *app = new a;
  app->run(app);
  delete app;
  return 0;
}

如果我不使用宏那么没问题

int main(int argc, const char ** argv)
{
  game *app = new game;
  app->run(app);
  delete app;
  return 0;
}

如何使用此宏?

更新

我认为我缺乏理解宏是如何工作的以及我从中复制的来源。 我没有意识到下面的函数是宏的一部分。

#define DECLARE_MAIN(a)                             \
int main(int argc, const char ** argv)              \
{                                                   \
    a *app = new a;                                 \
    app->run(app);                                  \
    delete app;                                     \
    return 0;                                       \
}

2 个答案:

答案 0 :(得分:2)

我怀疑你是否试图将宏用作typedef

看起来你的意思是:

typedef game a;

然后你就可以开始行了:

a * app = new a;

答案 1 :(得分:1)

将您的宏定义为:

#define DECLARE_MAIN(a) \
do {\
    a *app = new a; \
    app->run(app);\
    delete app;\
} while (0)

您只需编写:

,而不是写int main

在主要内部,您可以:

int main(int argc, char **argv) {
    DECLARE_MAIN(game);
    return 0;
}