提问者:小点点

Struct包含在两个头文件中,这两个头文件我都不拥有


我正在尝试使用C++中的SCHED_DEADLINE,我需要发送struct sched_attrto和ioctl,因此我包含了,该头还包含了strutsched_param。 我还包括,它包括C++的标准头,最终包括include\bits\sched.h,它还定义了structsched_param。 编译器(显然)并不特别喜欢这样。 我在代码中使用了头保护(_bits_types_struct_sched_param)来使编译器不包含include\bits\sched.h,但感觉应该有一个“更好”的方法。

> Executing task in folder sched_deadline_testing: arm-linux-gnueabihf-g++ -o LSM9DS0 src/LSM9DS0.cpp -Wall --pedantic <

In file included from src/LSM9DS0.cpp:36:
/usr/arm-linux-gnueabihf/include/linux/sched/types.h:7:8: error: redefinition of ‘struct sched_param’
 struct sched_param {
        ^~~~~~~~~~~
In file included from /usr/arm-linux-gnueabihf/include/bits/sched.h:74,
                 from /usr/arm-linux-gnueabihf/include/sched.h:43,
                 from /usr/arm-linux-gnueabihf/include/pthread.h:23,
                 from /usr/arm-linux-gnueabihf/include/c++/8/arm-linux-gnueabihf/bits/gthr-default.h:35,
                 from /usr/arm-linux-gnueabihf/include/c++/8/arm-linux-gnueabihf/bits/gthr.h:148,
                 from /usr/arm-linux-gnueabihf/include/c++/8/ext/atomicity.h:35,
                 from /usr/arm-linux-gnueabihf/include/c++/8/bits/basic_string.h:39,
                 from /usr/arm-linux-gnueabihf/include/c++/8/string:52,
                 from src/LSM9DS0.cpp:20:
/usr/arm-linux-gnueabihf/include/bits/types/struct_sched_param.h:23:8: note: previous definition of ‘struct sched_param’
 struct sched_param

如果重要的话,密码就在这里。 我也尝试过这种交叉编译,和本地编译,都造成了这个问题。


共1个答案

匿名用户

你运气不好。 这两个标头不兼容。 您必须避免将同时包含在同一个翻译单元中。 可能值得注意的是,作为Linux内核头,前者可能不打算在C++中使用,也没有尝试使其兼容。