将 C++ 代码从 Windows 移植到 Unix:系统调用与函数名称冲突

发布于 2024-08-26 12:37:09 字数 336 浏览 10 评论 0原文

我正在将一些粗糙的 C++ Windows 代码移植到 Linux,它在每个类中使用称为“open”和“close”的函数......非常糟糕的风格,或者?幸运的是,这在 Windows 中不是问题,因为它们的系统调用命名不同。

当我尝试调用系统调用 open() 或 close() 时,我收到一些有关“没有匹配的类调用函数:open()”的编译器错误。我无法在整个代码中重命名所有名为“class::open”和“class::close”的函数,并且由于我正在使用串行端口,所以我必须使用 open() 和 close() 。

所以我的问题是:我如何告诉编译器,我指的是哪个打开?如何转义或隐藏 C++ 中类的名称空间?

I'm porting some crufty C++ Windows-code to Linux, which uses functions called "open" and "close" inside every class... Very bad style, or? Luckily that wasn't a problem in windows, since their systemcalls are named different.

When I try to call the systemcalls open() or close() I'm getting some compiler error about "no matching function for call for class:open()". I can't rename all our functions named "class::open" and "class::close" in the whole code, and I have to use open() and close() since I'm working with serial ports.

So my question is: How can I tell the compiler, which open I mean? How can I escape or hide the namespace of a class in C++?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

悲歌长辞 2024-09-02 12:37:09

您可以使用 ::open 来引用全局命名空间中的 open

You can use ::open to refer to the open in the global namespace.

多情出卖 2024-09-02 12:37:09

您可以使用范围解析运算符来指示全局变体 ::open::close

You can use the scope resolution operator to indicate the global variants ::open and ::close.

单身狗的梦 2024-09-02 12:37:09

调用 ::open() 将调用全局函数 - 即系统调用。

Calling ::open() will call the global function - i.e. the system call.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文