2010-11-15 12 views
4

J'ai une fonction que je souhaite appeler depuis une méthode de classe. La fonction est dans un fichier appelé mergeSort.cpp. Voici un extrait du fichier .cpp que la classe est mis en œuvre:Appel d'une fonction "externe" à partir d'une méthode de classe

// other includes 
#include "mergeSort.cpp" 

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

Quand je tente de compiler je reçois des erreurs disant que mergesort ne peut pas être trouvé. Je pense que c'est parce qu'il essaie d'appeler Servers :: mergeSort. Comment pourrais-je appeler une fonction externe?

Répondre

6

Vous devez utiliser le « :: » espace externe resolutor:

::mergeSort(...); 

Cela indique au compilateur de chercher la fonction dans l'espace extra-atmosphérique. Si cette fonction particulière est définie dans un autre espace de noms ou de classe, vous devez spécifier explicitement:

Namespace::mergeSort(...); 

Si vous ne voulez pas avoir à résoudre complètement le nom chaque fois que vous utilisez, vous pouvez importer le nom dans l'espace de noms en cours en utilisant soit:

using namespace Namespace; 

ou

using Namespace::mergeSort; 

(où Namespace est le nom sous lequel mergeShort() est défini).

0

Vérifiez si mergeSort() est dans un namespace particulier.

1

Il semble y avoir quelques problèmes ici. Premièrement, est-ce que Servers::mergeSort existe réellement? Vous avez spéculé que c'est ce que vous cherchez, mais vous n'avez pas dit qu'il y a une telle chose. Si ce n'est pas le cas, ce n'est pas le problème. Dans ce cas, une raison probable pour laquelle il ne peut pas voir mergeSort serait que ce n'est pas dans l'espace de noms global (comme d'autres réponses ont spéculé). Si Servers::mergeSort existe, alors voir la réponse de Diego.

Un problème distinct est - êtes-vous en incluant le fichier .cpp (qui est généralement un peu impair) parce que mergeSort est un modèle? Si non, vous devriez probablement inclure le .h je suppose. Si oui, un modèle plus habituel est d'inclure le fichier avec le code de modèle dans l'en-tête, comme ceci:

// mergeSort.h 
// <Begin include guard 

// <Lots of header stuff> 

#include "mergeSort.tpp" 

// <End include guard> 

Ensuite, vous incluez mergeSort.h ailleurs, et il est une chose de moins pour les clients à ne pas oublier.

Questions connexes