我有一个我想在类方法中调用的函数。该函数位于名为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。我该如何调用外部函数?
答案 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。