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

6

我有一个函数希望在类方法中调用。该函数位于名为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个回答

9
您需要使用"::"外部命名空间解析符:
::mergeSort(...);

这告诉编译器在外部命名空间中查找函数。如果此特定函数在另一个命名空间或类中定义,您必须显式指定:

Namespace::mergeSort(...);

如果你不想每次使用时都完整地解析名称,你可以通过以下方式将名称导入到当前命名空间中:

using namespace Namespace;

或者

using Namespace::mergeSort;

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

1

这里似乎有几个问题。首先,Servers::mergeSort 是否真的存在?你猜测它正在寻找那个函数,但你并没有说确实存在这样一个函数。如果不存在,那就不是问题所在。在这种情况下,它无法找到 mergeSort 的一个可能原因是它不在全局命名空间中(正如其他答案所猜测的那样)。如果 Servers::mergeSort 确实存在,则请参见 Diego 的答案。

另一个问题是——你是否包含了 .cpp 文件(通常有点奇怪),因为 mergeSort 是一个模板?如果不是,我想你应该包含相应的 .h 文件。如果是,更常见的模式是在头文件中包含带有模板代码的文件,像这样:

// mergeSort.h
// <Begin include guard

// <Lots of header stuff>

#include "mergeSort.tpp"

// <End include guard>

然后你在其他地方包含mergeSort.h,这样客户就少了一件要记住的事情。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接