【发布时间】:2020-04-06 04:16:26
【问题描述】:
这就是我正在做的,但它给了我: “ 错误:value_t 的类型冲突”
我不知道为什么它不起作用,有人可以帮忙吗?
这是在我用于两个程序的头文件中,其中一个正在使用 -DFRACT 运行。
而另一个使用 -DINT,而我没有同时运行 -DINT 和 -DFRACT,那么为什么会导致冲突?
gcc -DFRACT -o program1 program1.c
这就是我运行 program1 的方式 ..
对于程序 2: gcc -DINT -o program2 program2.c
我还检查了所有其他头文件的重复项,但没有发现 谢谢你!
#ifdef INT
typedef int value_t;
typedef double Key_t;
#endif
#ifdef FRACT
typedef Fraction value_t;
typedef double Key_t;
#endif
【问题讨论】:
-
旁白:
typedef double Key_t;对两者都是通用的,因此请考虑不要复制代码 -
无法从您的代码中重现错误。您必须以某种方式将
#define INT和#define FRACT放在一起。您应该检查所有头文件,而不仅仅是这个。该文件还包括哪些其他头文件?他们是否以任何方式一起定义了这些宏?或者,你忘记#undef什么了吗? -
“我没有同时运行 -DINT 和 -DFRACT”。你只是这么认为还是你已经证明了这一点?通过直接查看实际的预处理输出进行验证。如果使用
gcc,则选项为-E。事实上,我们无法真正提供帮助,因为您的问题中没有足够的信息让我们看到问题。 -
我检查了所有这些,没有其他定义 INT 和 FRACT
-
尝试将其添加到您的代码中(3 个单独的行):
#if defined(INT) && defined(FRACT)#error "both INT and FRACT defined"#endif