OVH Cloud OVH Cloud

Question de débutant sur les fichiers en-tête .h

32 réponses
Avatar
Edwin Groulala
Bonjour,

Je débute avec c++. Je voudrais structurer mon programme en fichiers .h
et fichier .cc.

Dans un fichier manipstr.h j'ai déclaré une fonction convertToUpperCase
(string)

Le début de manipstr.h est le suivant:

#include <string>

#ifndef MANIPSTR_H
#define MANIPSTR_H

string convertToUpperCase (string);

#endif

Lors de la compilation, j'obtiens le message suivant:

manipstr.h:6: error: `string' was not declared in this scope

Apparemment la ligne "#include <string>" dans mon fichier manipstr.h n'a
servi à rien...

Comment dois-je faire pour pouvoir déclarer dans manipstr.h des
fonctions utilisant la classe string ? (quelle ligne dois-je écrire dans
mon fichier .h)

Désolé de poser une question aussi basique mais je n'ai pas trouvé la
réponse via google.

Merci d'avance pour votre aide.

Groulala

10 réponses

1 2 3 4
Avatar
Gabriel Dos Reis
Andre Heinen writes:

[...]

| Pour répondre à ta question, je ne vois pas d'exemple où ce soit
| une bonne idée de mettre une directive using dans un en-tête.
| Bien sûr, ce n'est pas parce que je n'en vois pas qu'il ne peut
| pas en exister.

Comment proposes-tu d'utiliser « namespace composition », alors ?


|
| Contrairement à la grammaire du langage, les règles relatives au
| style de programmation ne sont jamais impératives. Lorsque je

Woaw,

| dis "jamais de using dans un .h", je sous-entends "à moins que tu
| ne saches vraiment ce que tu fais, et que dans ton cas précis il
| y ait une bonne raison de faire autrement". Comme c'est un peu

En français, « éviter » se rapproche plus de ça que « jamais ».

| long, je ne l'écris pas tout le temps, d'autant plus que je
| pensais que c'était évident.
|
| Pas d'accord?

Non.

-- Gaby
Avatar
drkm
Andre Heinen writes:

On 07 Dec 2004 14:20:48 +0100, Gabriel Dos Reis
wrote:

Vraiment ?


Donne-nous donc un exemple, au lieu de poser des énigmes...


namespace drkm {
using namespace stuff_I_reuse ;
class MyStuff {
} ;
}

Maintenant, je ne vois pas d'utilité à un « namespace std ; » au
niveau de l'espace de nommage global dans un en-tête.

--drkm


Avatar
Loïc Joly
Gabriel Dos Reis wrote:
Andre Heinen writes:

| => jamais de using dans un .h

Vraiment ?


Est-ce qu'une formulation du type "jamais de namespace à portée de
fichier dans un .h" te conviendrait plus ?

--
Loïc

Avatar
Gabriel Dos Reis
drkm writes:

| Andre Heinen writes:
|
| > On 07 Dec 2004 14:20:48 +0100, Gabriel Dos Reis
| > wrote:
|
| >>Vraiment ?
|
| > Donne-nous donc un exemple, au lieu de poser des énigmes...
|
| namespace drkm {
| using namespace stuff_I_reuse ;
| class MyStuff {
| } ;
| }
|
| Maintenant, je ne vois pas d'utilité à un « namespace std ; » au
| niveau de l'espace de nommage global dans un en-tête.

Entièrement d'accord.

-- Gaby
Avatar
Gabriel Dos Reis
Loïc Joly writes:

| Gabriel Dos Reis wrote:
| > Andre Heinen writes:
| > | => jamais de using dans un .h
| > Vraiment ?
|
| Est-ce qu'une formulation du type "jamais de namespace à portée de
| fichier dans un .h" te conviendrait plus ?
|

Oui, je peux vivre avec :-)

-- Gaby
Avatar
Erwann ABALEA
On Tue, 7 Dec 2004, Andre Heinen wrote:

Contrairement à la grammaire du langage, les règles relatives au
style de programmation ne sont jamais impératives. Lorsque je
dis "jamais de using dans un .h", je sous-entends "à moins que tu
ne saches vraiment ce que tu fais, et que dans ton cas précis il
y ait une bonne raison de faire autrement". Comme c'est un peu
long, je ne l'écris pas tout le temps, d'autant plus que je
pensais que c'était évident.


Un peu comme le SHOULD NOT de la RFC2119 alors?

--
Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5
-----
Moi si je devais voter pour ce forum, je serais d'accord pour
virer tous les abrutis!!!
-+-DF in Guide du Neuneu Usenet - Ce neuneu s'autodétruira dans 1 mn -+-

Avatar
drkm
Gabriel Dos Reis writes:

drkm writes:

| Maintenant, je ne vois pas d'utilité à un « namespace std ; » au
^^^

| niveau de l'espace de nommage global dans un en-tête.

Entièrement d'accord.


Et à un « using namespace std ; » également ?-)

--drkm

Avatar
kanze
Andre Heinen wrote:
On 07 Dec 2004 14:20:48 +0100, Gabriel Dos Reis
wrote:

Vraiment ?


Donne-nous donc un exemple, au lieu de poser des énigmes...


Ça ne serait pas Gaby s'il faisait quelque chose qui puisse aider
quelqu'un, à la place de critiquer.

Ce que tu as dit, mot-à-mot, c'est « jamais de using dans un .h ».
Or,
je doute que c'est réelement ça tes sentiments. J'imagine que tu
pensais
quelque chose plutôt du genre « jamais un directif de using à la
portée
globale dans un en-tête ». Un « directif de using » et « portée
globale@», parce que je ne crois pas que c'était ton intention
d'intérdire quelque chose comme :

class C : public B
{
public:
using f() ;
// ...
} ;

ni même l'utilisation d'un using à l'intérieur d'une fonction
inline.

De même « en-tête », parce que je suis certain que tu n'admets pas
plus
les directifs using dans un .hh ou un .hpp.

Quelqu'un de constructif aurait signalé que ton énoncée manquait de
précision, et qu'elle disait à la fois plus et moins que ce que tu
voulais dire (parce que pour moi, au moin, l'intention était
évidente,
même si la formulation n'était pas parfaite). En expliquant pourquoi,
évidemment. Mais ben, on est comme on est.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
kanze
Gabriel Dos Reis wrote:
Andre Heinen writes:


[...]
| dis "jamais de using dans un .h", je sous-entends "à moins que tu
| ne saches vraiment ce que tu fais, et que dans ton cas précis il
| y ait une bonne raison de faire autrement". Comme c'est un peu

En français, « éviter » se rapproche plus de ça que « jamais
».


En informatique professionnelle, toutes les « guidelines » de
programmation commence par une règle d'or : on peut toujours violer la
règle si c'est justifié. André a présenté une des règles, non l es
« guidelines » complètes. Il va de soi pour un professionnel qu'il y
a
d'autres règles. Et que la règle d'or s'y trouve. On ne va pas
s'emmerder avec une verbosité inutile pour des gens qui s'y
connaissent
en génie logicielle.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
drkm
writes:

Quelqu'un de constructif aurait signalé que ton énoncée manquait de
précision


Gaby, pas constructif ?

--drkm

1 2 3 4