2010-11-11 21 views
1

Mon fichier d'en-tête est la suivante:Cordes en C-tête des fichiers

#include <iostream> 
#include <string> 
#include <windows.h> 
#include <math.h> 

//using namespace std; 

std::string StringMultiply(string Str, int Mult) 
{ 
    std::string Return; 

    for (int Index = 0; Index <= Mult; Index++) 
    { 
     Return += Str; 
    } 

    return Return; 
} 

il produit une compilation flopée d'erreurs, la plupart d'entre eux ayant trait à l'absence d'un string type de données. Décommenter la ligne using namespace std; le corrige, mais on m'a dit que c'est une mauvaise pratique dans les fichiers d'en-tête.

Répondre

8

changement

std::string StringMultiply(string Str, int Mult) 

à

std::string StringMultiply(std::string Str, int Mult) 
+0

Merci, ça l'a corrigé. – Maxpm

2

Vous devez qualifier string comme std::string chaque fois que vous utilisez si vous commentez la ligne using. La valeur de retour pour StringMultiply est correcte mais le paramètre ne l'est pas.

Personnellement, je ne comprends pas le conseil par rapport using namespace std; - Je n'aime pas taper plus que je dois.

+0

re conseil habituel "ne pas mettre un' using namespace std; 'à portée globale dans un fichier d'en-tête", dire que quelqu'un a ignoré ce conseil et l'a fait, vous utilisez l'en-tête de quelqu'un et vous avez quelque chose nommé ' compte ». Oh oh, il y a aussi un 'std :: count' (IIRC). Il peut être résolu, c'est ce que sont les espaces de noms, mais au lieu de faire un travail supplémentaire pour beaucoup d'utilisateurs du fichier d'en-tête, il est logique que l'auteur du fichier d'en-tête fasse un peu plus de travail. À votre santé, –

2

Si vous avez remplacé string Str avec std::string Str dans la liste des paramètres, tout compilerait bien. Quel est exactement le problème?