c++ - 如何编译字段与类型名称完全相同的代码?

标签 c++

我从 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/

相关文章:

c++ - 限制对C++目标的递归

c++ - 将数字 vector 从基数转换为基数

c++ - VSCode 、 cmake debug 未在 Windows PC 上提供输出

c++ - 搜索进程内存

c++ - 封装与结构——这被认为是糟糕的风格吗?

c++ - 应该避免还是鼓励 `using std::cin` 和 `using std::cout`?

c++ - 检测类型是否抛出

c++ - C/C++ header 、dll 和导出

c++ - 在 C++11 中设置 std::thread 优先级的可移植方法

c++ - C++ 类中的枚举