我从 here 复制粘贴了一些代码并且无法编译。这部分的问题:
struct pkt_buf {
/* I/O address corresponding to the start of this pkt_buf struct */
ef_addr ef_addr;
我有这个错误:
openonload-201509/src/include/etherfabric/ef_vi.h:119:33: error: changes meaning of ‘ef_addr’ from ‘typedef uint64_t ef_addr’ [-fpermissive]
typedef uint64_t ef_addr;
据我所知,我不能对类型和字段使用相同的名称。 但是我链接的库被广泛使用,它必须编译。 我的编译器设置可能有问题吗?如何编译我的代码?
最佳答案
源码是efsink.c
,是一个C文件。
此代码在 C 中有效但在 C++ 中无效(我认为)。
您应该使用 C 编译器来编译 C 文件。 C和C++是不同的语言。
主要的 C++ 编译器也捆绑了 C 编译器,通常它们会根据文件名自动检测语言(但这可以用开关覆盖)。
您的项目可以包含一些 C 文件和一些 C++ 文件,但您必须为 C 文件使用 C 编译器,为 C++ 文件使用 C++ 编译器。
关于c++ - 如何编译字段与类型名称完全相同的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34449966/