Вызов «внешней» функции из метода класса - PullRequest
5 голосов
/ 16 ноября 2010

У меня есть функция, которую я хочу вызвать из метода класса.Функция находится в файле с именем 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 ]

7 голосов
/ 16 ноября 2010

Вы должны использовать внешний преобразователь пространства имен "::":

::mergeSort(...);

Это говорит компилятору искать функцию во внешнем пространстве имен.Если эта конкретная функция определена в другом пространстве имен или классе, вы должны указать ее явно:

Namespace::mergeSort(...);

Если вы не хотите полностью разрешать имя при каждом его использовании, вы можете импортироватьимя в текущем пространстве имен, используя:

using namespace Namespace;

или

using Namespace::mergeSort;

(где Namespace - имя, в котором определен mergeShort()).

1 голос
/ 16 ноября 2010

Кажется, здесь есть пара проблем.Во-первых, действительно ли существует Servers::mergeSort?Вы предположили, что он ищет это, но вы на самом деле не сказали, что есть такая вещь.Если нет, то это не проблема.В этом случае вероятная причина, по которой он не видит mergeSort, заключается в том, что он не находится в глобальном пространстве имен (как предполагают другие ответы).Если Servers::mergeSort существует, то посмотрите ответ Диего.

Отдельная проблема - вы включаете файл .cpp (который обычно немного странный), потому что mergeSort - это шаблон?Если нет, то вам, вероятно, следует включить сопровождающее.Если да, то более обычным шаблоном является включение файла с кодом шаблона в заголовок, например так:

// mergeSort.h
// <Begin include guard

// <Lots of header stuff>

#include "mergeSort.tpp"

// <End include guard>

Затем вы добавляете mergeSort.h в другом месте, и клиенты помнят одну вещь меньше

0 голосов
/ 16 ноября 2010

Проверьте, находится ли mergeSort() в определенном пространстве имен .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...