命名空间内的宏在'do'错误之前给出了预期的nonqualified-id

时间:2017-11-24 15:20:14

标签: c++

我试图在命名空间中使用宏来记录目的,以获取文件名和亚麻布。 以下是生成错误的代码的简化版本。

#include <iostream>
using namespace std;

namespace A
{
    #define MACRO(a) \
    do { \      //error: expected unqualified-id before 'do'
    B::func() \
    } while(0)

    class B
    {
    public:
        static void func(){cout << "called from MACRO\n";}
    };
}

int main() {
    A::MACRO("something"); //note: in expansion of macro ‘MACRO’
    return 0;
}

我还尝试使用其他格式(如

)定义宏
#define MACRO(message) \
( \
   { \
      B::func() \
   } \
 )

但同样的错误。这是一个link到最小的工作示例。

This让我想到以这种方式使用宏。但是在那个问题中没有使用任何课程,正如我所提到的,这是我想要实现的简化版本。

1 个答案:

答案 0 :(得分:1)

宏是一种预处理概念。预处理器没有命名空间的概念。

您可以在命名空间内定义宏,但是您将使用非限定名称:

namespace n {
#define MACRO(x)
}

int main()
{
    MACRO("something");
}