-1

是否可以在命名空间内引用结构类型(例如,在 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 结构的处理方式不同?

提前致谢。

4

1 回答 1

2

您只需要包含正确的头文件,否则您的代码是正确的。有epoll.hsys没有epoll标题

更新

#include <sys/epoll>

#include <sys/epoll.h>
于 2013-09-28T08:35:36.180 回答