用eclipse 创建c++项目,
定义c的结构体报错
结构体如下:
typedef struct aeEventLoop {
int maxfd; /* highest file descriptor currently registered */
int setsize; /* max number of file descriptors tracked */
long long timeEventNextId;
time_t lastTime; /* Used to detect system clock skew */
aeFileEvent *events; /* Registered events */
aeFiredEvent *fired; /* Fired events */
aeTimeEvent *timeEventHead;
int stop;
void *apidata; /* This is used for polling API specific data */
aeBeforeSleepProc *beforesleep;
}aeEventLoop;
异常如下
error: changes meaning of ‘aeEventLoop’ from ‘typedef struct aeEventLoop aeEventLoop’ [-fpermissive]
执行命令如下
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/server.d" -MT"src/server.o" -o "src/server.o" "../src/server.cpp"
执行命令如下
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/server.d" -MT"src/server.o" -o "src/server.o" "../src/server.cpp"
aeEventLoop明显重名了。
typedefstruct{...}aeEventLoop;
这样不行吗?或者typedefstructaeEventLoopEx这样换个名字
不行,还是报错}aeEventLoop; 这一行直接修改为 }; 就可以了。
不行。[root@localhostDocuments]#cattest.c#include<iostream>typedefstruct{inta;}aeEventLoop;intmain(){aeEventLoopael;ael.a=3456;std::cout<<ael.a<<std::endl;return0;}[root@localhostDocuments]#g++test.c[root@localhostDocuments]#./a.out3456[root@localhostDocuments]#
写法是没问题,我这里可以编译
我是使用eclipse作为ide,真的不知道哪里报错了。typedef 去掉。
去掉其他地方报错,那么饿其他地方需要修改成structaeEventLoop×aeEventLoop
$catserver.cpp#include<iostream>typedefstructaeEventLoop{intmaxfd;intminfd;};intmain(){aeEventLoopael;ael.maxfd=10;ael.minfd=0;std::cout<<ael.maxfd<<"\n"<<ael.minfd<<std::endl;return0;}$g++server.cppserver.cpp:3:1:warning:'typedef'wasignoredinthisdeclarationtypedefstructaeEventLoop{^~~~~~~$./a.exe100
gccversion7.1.0(Rev2,BuiltbyMSYS2project)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。