2010-11-15 172 views
4

我有一個函數,我想從類方法內調用。該函數位於名爲mergeSort.cpp的文件中。下面是這個類中實現的.cpp文件的一個片段:從類方法調用「外部」函數

// other includes 
#include "mergeSort.cpp" 

// other methods 
void Servers::sortSites() { 
mergeSort(server_sites.begin(), server_sites.end(), siteCompare); 
} 
// remaining methods 

當我嘗試編譯我得到的錯誤說,歸併無法找到。我認爲這是因爲它試圖調用Servers :: mergeSort。我將如何去調用一個外部函數?

回答

6

您必須使用「::」外部名稱空間resolutor:

::mergeSort(...); 

這告訴編譯器來尋找外部命名空間中的功能。如果這個特殊功能在另一個命名空間或類中定義的,你必須明確指定:

Namespace::mergeSort(...); 

如果你不希望有來解析名稱完全每次使用它的時候,你可以導入名稱到當前的命名空間通過或者使用:

using namespace Namespace; 

using Namespace::mergeSort; 

(其中Namespace是其中mergeShort()定義名稱)。

1

似乎有成爲一對夫婦的問題在這裏。首先,Servers::mergeSort確實存在?你猜測它是在尋找那個,但你實際上沒有說過有這樣的事情。如果沒有,那不是問題。在這種情況下,它看不到mergeSort的一個可能的原因是它不在全局命名空間中(正如其他答案推測的那樣)。如果Servers::mergeSort確實存在,那麼請參閱迭戈的答案。

另外一個問題是 - 你包括.cpp文件(這通常是一個有點奇怪),因爲歸併爲一個模板?如果不是,你可能應該包括伴隨的.h我猜。如果是的話,更通常的模式是,包括在標題中的模板代碼的文件,像這樣:

// mergeSort.h 
// <Begin include guard 

// <Lots of header stuff> 

#include "mergeSort.tpp" 

// <End include guard> 

然後你包括mergeSort.h其他地方,它是一個東西少,爲客戶記住。