从类方法调用“外部”函数

时间:2010-11-15 22:53:53

标签: c++ class function methods

我有一个我想在类方法中调用的函数。该函数位于名为mergeSort.cpp的文件中。以下是该类实现的.cpp文件的片段:

// other includes
#include "mergeSort.cpp"

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

当我尝试编译时,我得到错误,说无法找到mergeSort。我认为这是因为它试图调用Servers :: mergeSort。我该如何调用外部函数?

3 个答案:

答案 0 :(得分:7)

您必须使用“::”外部命名空间resolutor:

::mergeSort(...);

这告诉编译器在外部命名空间中查找该函数。如果在另一个名称空间或类中定义了此特定函数,则必须明确指定它:

Namespace::mergeSort(...);

如果您不想在每次使用时完全解析名称,可以使用以下命令将名称导入当前命名空间:

using namespace Namespace;

using Namespace::mergeSort;

(其中Namespace是定义mergeShort()的名称。

答案 1 :(得分:1)

这里似乎有几个问题。首先,Servers::mergeSort确实存在吗?你猜测它正在寻找它,但你实际上并没有说过有这样的事情。如果没有,那不是问题。在这种情况下,它无法看到mergeSort的可能原因是它不在全局命名空间中(正如其他答案推测的那样)。如果确实存在Servers::mergeSort,请参阅Diego的回答。

另一个问题是 - 你是否包含.cpp文件(通常有点奇怪),因为mergeSort是一个模板?如果不是,你应该包括随附的。我想。如果是,更常见的模式是在头文件中包含带有模板代码的文件,如下所示:

// mergeSort.h
// <Begin include guard

// <Lots of header stuff>

#include "mergeSort.tpp"

// <End include guard>

然后在其他地方包含mergeSort.h,对于客户来说,记住它是一件事。

答案 2 :(得分:0)

检查mergeSort()是否属于特定namespace