2010-11-15 161 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其他地方,它是一个东西少,为客户记住。