gpt4 book ai didi

c++ - gcc 警告“没有声明任何东西

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:42 26 4
gpt4 key购买 nike

我正在努力通过将 typedef 转换为使用别名来将一些 C++ 代码更新为 C+11。给定以下 SCCE:

#include <iostream>
#include <linux/cn_proc.h>
/**
* Legacy C structure
*/
struct sample {
enum what {
FOO,
BAR
} what;
};

void tdef( ) {
typedef enum sample::what demo;
demo a = sample::FOO;
std::cout << a << std::endl;
}

void usingdemo( ) {
using demo = enum sample::what;
demo a = sample::BAR;
std::cout << a
<< std::endl;
}

int main() {
tdef();
usingdemo();
}

我在使用 using 声明时收到警告:

warning: declaration ‘enum sample::what’ does not declare anything
using demo = enum sample::what;
^

尽管代码可以正常编译和执行。编译器是g++ (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609是编译器的问题,还是我的问题?


感谢您的回复。关于 C 结构的评论:

  • “S”是 SCCE 很小,所以我发布了最小的结构证明问题。我使用的实际结构是“struct proc_event”来自 linux/cn_proc.h .

  • 我只是在没有“extern C”的情况下包含它并且运行良好。

最佳答案

Does the fault lie in the compiler?

这是一个编译器错误。它似乎已经被报道过:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66159 .当在 using 声明中使用详细的名称说明符时,问题会重现。在这种情况下,您需要使用详尽的名称说明符来避免与具有相同名称的成员产生歧义。

解决方法:改用 typedef 声明:

typedef enum sample::what demo;

关于c++ - gcc 警告“没有声明任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55183616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com