是否可以在命名空间内引用结构类型(例如,在 sys/epoll.h 中声明的 epoll_event)?
我试过了:
#include <iostream>
#include <sys/epoll>
namespace N1 {
namespace N2 {
class C {
public:
void print() const {
std::cout << sizeof(struct epoll_event) << std::endl;
}
};
}
}
int main(int argc, char** argv) {
N1::N2::C c;
c.print();
return 0;
}
而 g++ 给了我这个错误:
nested.cpp:3:21: error: sys/epoll: No such file or directory
nested.cpp: In member function ‘void N1::N2::C::print() const’:
nested.cpp:23: error: invalid application of ‘sizeof’ to incomplete type ‘N1::N2::epoll_event’
并且由于某些原因,那些属于 std 的“全局”结构不会出现上述问题(我尝试将“struct epoll_event”替换为“struct tm”,它工作正常)。
所以 2 个问题:
1. 引用那些“全局”非标准结构的正确方法是什么?
2.为什么编译器(至少g ++ 4.4.x)对引用那些“全局” std 结构的处理方式不同?
提前致谢。