5 votes

où dois-je inclure la bibliothèque string dans mon fichier d'en-tête C++ ?

Ma classe simple ne se compile pas dans Visual Studio. Elle fonctionnait avant que je n'y ajoute la chaîne de caractères company member et la méthode getter getCo(). Je pense que je dois mettre #include la bibliothèque standard string quelque part mais je ne sais pas où. Une idée de l'endroit ? Dans mon fichier d'en-tête, j'ai :

#pragma once
#ifndef ENGINEER_H_
#define ENGINEER_H_

class engineer {
    int years;
    string company;
public:
    engineer(int years);
    ~engineer(void);
    int getYears();
    string getCo();
};

#endif ENGINEER_H_

Et dans mon fichier CPP pour la définition de la classe, j'ai :

#include "StdAfx.h"
#include "engineer.h"

engineer::engineer(int y, string c){
    years = y;
    company = c;
}

engineer::~engineer(void) {
}

int engineer::getYears() {
    return years;
}

string engineer::getCo() {
    return company;
}

18voto

Chad Points 9700

Mettez-le dans le fichier d'en-tête, et préfixez votre utilisation de string avec l'espace de noms std .

En-tête :

#include <string>

class engineer
{
   std::string company;
};

Dans le fichier d'implémentation ( .cpp ) vous pouvez préfixer les noms ou avoir un using directive.

Mise en œuvre :

using namespace std;  // using directive, no longer need to use std::

Évitez de mettre le using dans un fichier d'en-tête, car cela pollue l'espace de noms global et peut causer des problèmes de collision de noms dans d'autres bibliothèques que vous pourriez souhaiter utiliser.

2voto

eran Points 12628

Mettez-le dans le fichier d'en-tête, après les gardes d'inclusion :

#include <string>
using std::string;

De cette façon, il sera également disponible pour votre fichier cpp, et vous n'aurez pas à l'inclure à nouveau.

D'ailleurs, le #pragma once et #ifndef ENGINEER_H_ servent le même objectif. Vous ne pouvez avoir qu'un seul d'entre eux. Le code généré par VC utilise le #pragma qui est plus court et n'ajoute pas de définition, c'est donc ce que j'utiliserais (il n'y a pas de mal à laisser les deux, cependant).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X