运算符'=='没有左操作数。

9

给定:

#if defined(TESTING) 
   #if (TESTING == UNIT_TEST)
            State<StateTypeEnum, EventTypeEnum>::_isIgnoredEvent = false;
            State<StateTypeEnum, EventTypeEnum>::_isInvalidEvent = false;
   #endif
#endif

在定义了TESTINGUNIT_TEST,且TESTING == UNIT_TEST的情况下,为什么GCC会报错?
../testing/fsm/../../fsm/h/state.h:207:17: error: operator '==' has no left operand
    #if (TESTING == UNIT_TEST)
                 ^

1
无法重现 - chris
2
你如何定义 TESTING - masoud
这么长时间过去了,突然三个踩。如果有人能告诉我原因,我会进行修正。谢谢。 - Mawg says reinstate Monica
1个回答

14

看起来您仅仅定义了一个名为TESTING的变量,但没有为其定义值,无论是内联还是作为编译器命令行的一部分。

#define TESTING

它被定义了,且#if defined测试为true,但是比较操作不起作用因为它的宏替换值为空(或类型不正确)。

然而,如果给它一个值,那么你的代码就可以工作。

#define TESTING 1
#define UNIT_TEST 1

#if defined(TESTING) 
#if (TESTING == UNIT_TEST)
cout << "Unit test";
#endif
#endif

1
请注意,编译器在处理命令行符号定义时会有所不同。这是符号的定义方式吗?如果是,那么使用的是哪个编译器?真实答案。 - david.pfx
@david.pfx 你是想评论原帖的问题还是我的回答? - codenheim
两者都可以。可能只是我有点懒。您可以更新您的回答来包括符号是否在命令行上定义,然后 OP 可以说明它是否被定义。 - david.pfx
1
@david.pfx 我在我的原始答案中已经包含了这种可能性。 - codenheim
我在NetBeans项目文件中定义了它,我认为这意味着它将通过命令行传递。 - Mawg says reinstate Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接