2010-03-24 67 views
1

我將一些Crucible C++ Windows代碼移植到Linux,它在每個類中使用稱爲「open」和「close」的函數......非常糟糕風格還是?幸運的是,這在Windows中不是問題,因爲它們的系統調用名稱不同。當我嘗試調用systemcalls open()或close()時,我得到了一些有關「沒有匹配函數調用類:open()」的編譯器錯誤。我不能在整個代碼中重新命名我們所有名爲「class :: open」和「class :: close」的函數,而且我必須使用open()和close(),因爲我正在使用串行端口。移植C++ - 代碼從Windows到Unix:systemcalls與函數名衝突

所以我的問題是:我怎麼能告訴編譯器,我打開的意思是?我如何在C++中轉義或隱藏類的名稱空間?

+0

您在Linux上使用哪種編譯器? – 2010-03-24 12:20:28

+0

gcc版本4.4.1 – marvin2k 2010-03-24 12:25:16

回答

7

您可以使用::open來引用全局名稱空間中的open

+0

謝謝!你在哪裏,第一,所以我正在標記你的答案 - 但這是一場親密的比賽! – marvin2k 2010-03-24 12:24:18

1

您可以使用示波器分辨率運算符來指示全局變體::open::close

1

Calling :: open()將調用全局函數 - 即系統調用。