2011-02-08 113 views
0

我甚至可能沒有正確地提出問題,但這是我的情況。我有一個名字空間,我想把所有的全局函數放在這個名字空間中。我想將它們全部定義在相應的.cpp文件中。這些函數中的許多函數都可以訪問非全局類的實例,這些實例可能自身也可能不是名稱空間的成員。我可以轉發聲明這些類,但是當我嘗試調用類方法時,我當然仍然會收到鏈接器錯誤。一個(看起來很糟糕的)解決方案是定義這些全局變量之後已經定義了相應的類,但是這會在不同的文件中放入不同的函數,我想不惜一切代價避免這種情況,這樣做似乎是非常錯誤的。如何將全局函數全部訪問到非全局類?

我還能做什麼?我想我在這裏有一個概念問題,什麼樣的設計策略可能有助於解決這個問題?我必須讓它們成爲相應類的靜態成員嗎​​?我不喜歡這個B/C我的類有很長的名字,但我的命名空間名稱很短...所以只需使用typedef?但從概念上講,這些都是全球性的功能,所以我想保持這種方式...感謝您的考慮。

+3

簡單地說`#include'頭文件到你的「全局」源文件中有什麼問題? – 2011-02-08 16:47:30

回答

0

我不能標記評論作爲答案,所以我只是自己發佈 - 基本上Oli Charnesworth是正確的,重構是解決方案。有一個特定的類導致了我的循環依賴問題,我只是重新編寫了一些東西,以便它不再依賴於'全局'信息,而是'全局'信息#包含它。

2

我會在他們自己的頭文件中定義「全局函數」。如果您需要添加前向聲明,請在此處進行。

在.cpp文件中,只需根據需要包含其他「非全局」類和函數的標頭。這將保持公共API「乾淨」(頭文件),同時讓你在這些函數的實際代碼中正常開發。

+0

是否包含足夠的* .h文件?這似乎很奇怪,因爲這些* .h文件本身必須包含聲明全局名稱空間的* .h文件。無論如何,我會在今晚嘗試這個(並再次發佈),謝謝。 – 2011-02-08 17:17:21

+0

@Matt:是的。頭文件應該被保護,所以類型只會被包含一次。前向聲明處理循環引用... – 2011-02-08 17:23:29

1

正如@Oli Charlesworth所建議的,你可以在你的全局方法源文件中分別使用#include相應的類頭文件嗎?