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.
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...
sisi :) string fait partie du namespace std Donc soit tu l'utilises par std::string (à la place de string tout seul) soit tu mets using namespace std; après le #include<string>
-- Hamiral
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...
sisi :)
string fait partie du namespace std
Donc soit tu l'utilises par std::string (à la place de string tout seul)
soit tu mets using namespace std; après le #include<string>
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...
sisi :) string fait partie du namespace std Donc soit tu l'utilises par std::string (à la place de string tout seul) soit tu mets using namespace std; après le #include<string>
-- Hamiral
Loïc Joly
Hamiral wrote:
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...
sisi :) string fait partie du namespace std Donc soit tu l'utilises par std::string (à la place de string tout seul) soit tu mets using namespace std; après le #include<string>
Comme il s'agit d'un fichier en-tête, y placer un using namespace std serait du plus mauvais goût, il ne reste donc que la première solution.
-- Loïc
Hamiral wrote:
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...
sisi :)
string fait partie du namespace std
Donc soit tu l'utilises par std::string (à la place de string tout seul)
soit tu mets using namespace std; après le #include<string>
Comme il s'agit d'un fichier en-tête, y placer un using namespace std
serait du plus mauvais goût, il ne reste donc que la première solution.
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...
sisi :) string fait partie du namespace std Donc soit tu l'utilises par std::string (à la place de string tout seul) soit tu mets using namespace std; après le #include<string>
Comme il s'agit d'un fichier en-tête, y placer un using namespace std serait du plus mauvais goût, il ne reste donc que la première solution.
-- Loïc
Sayajin
"Loïc Joly" a écrit dans le message de news:41b4c47f$0$3426$
Hamiral wrote:
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...
sisi :) string fait partie du namespace std Donc soit tu l'utilises par std::string (à la place de string tout seul) soit tu mets using namespace std; après le #include<string>
Comme il s'agit d'un fichier en-tête, y placer un using namespace std serait du plus mauvais goût, il ne reste donc que la première solution.
Ce n'est pas "plus pratique" que de faire toujours std::string ?
"Loïc Joly" <loic.actarus.joly@wanadoo.fr> a écrit dans le message de
news:41b4c47f$0$3426$8fcfb975@news.wanadoo.fr...
Hamiral wrote:
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...
sisi :)
string fait partie du namespace std
Donc soit tu l'utilises par std::string (à la place de string tout seul)
soit tu mets using namespace std; après le #include<string>
Comme il s'agit d'un fichier en-tête, y placer un using namespace std
serait du plus mauvais goût, il ne reste donc que la première solution.
Ce n'est pas "plus pratique" que de faire toujours std::string ?
"Loïc Joly" a écrit dans le message de news:41b4c47f$0$3426$
Hamiral wrote:
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...
sisi :) string fait partie du namespace std Donc soit tu l'utilises par std::string (à la place de string tout seul) soit tu mets using namespace std; après le #include<string>
Comme il s'agit d'un fichier en-tête, y placer un using namespace std serait du plus mauvais goût, il ne reste donc que la première solution.
Ce n'est pas "plus pratique" que de faire toujours std::string ?
Andre Heinen
On Tue, 7 Dec 2004 12:48:18 +0100, "Sayajin" wrote:
"Loïc Joly" a écrit dans le message de news:41b4c47f$0$3426$
Comme il s'agit d'un fichier en-tête, y placer un using namespace std serait du plus mauvais goût, il ne reste donc que la première solution.
Ce n'est pas "plus pratique" que de faire toujours std::string ?
Quand tu commenceras à avoir des collisions de noms, tu trouveras ça moins pratique... ;-)
Si vraiment tu as une fonction où il y a trop de std:: le mieux est de mettre une directive using locale à la fonction:
void f() { using namespace std; ... }
De cette manière, la directive using n'a pas d'effet à l'extérieur de f().
Si vraiment tu veux une directive using globale, tu peux la mettre dans un .cpp, mais jamais dans un .h. Si tu enfreins cette règle, tout fichier source qui inclut ledit header inclura aussi la directive using, même si tu ne le désires pas, et même si tu as des collisions de noms.
=> jamais de using dans un .h
-- Andre Heinen My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
On Tue, 7 Dec 2004 12:48:18 +0100, "Sayajin"
<metalkura@wanadoo.fr> wrote:
"Loïc Joly" <loic.actarus.joly@wanadoo.fr> a écrit dans le message de
news:41b4c47f$0$3426$8fcfb975@news.wanadoo.fr...
Comme il s'agit d'un fichier en-tête, y placer un using namespace std
serait du plus mauvais goût, il ne reste donc que la première solution.
Ce n'est pas "plus pratique" que de faire toujours std::string ?
Quand tu commenceras à avoir des collisions de noms, tu trouveras
ça moins pratique... ;-)
Si vraiment tu as une fonction où il y a trop de std:: le mieux
est de mettre une directive using locale à la fonction:
void f() {
using namespace std;
...
}
De cette manière, la directive using n'a pas d'effet à
l'extérieur de f().
Si vraiment tu veux une directive using globale, tu peux la
mettre dans un .cpp, mais jamais dans un .h. Si tu enfreins
cette règle, tout fichier source qui inclut ledit header inclura
aussi la directive using, même si tu ne le désires pas, et même
si tu as des collisions de noms.
=> jamais de using dans un .h
--
Andre Heinen
My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
On Tue, 7 Dec 2004 12:48:18 +0100, "Sayajin" wrote:
"Loïc Joly" a écrit dans le message de news:41b4c47f$0$3426$
Comme il s'agit d'un fichier en-tête, y placer un using namespace std serait du plus mauvais goût, il ne reste donc que la première solution.
Ce n'est pas "plus pratique" que de faire toujours std::string ?
Quand tu commenceras à avoir des collisions de noms, tu trouveras ça moins pratique... ;-)
Si vraiment tu as une fonction où il y a trop de std:: le mieux est de mettre une directive using locale à la fonction:
void f() { using namespace std; ... }
De cette manière, la directive using n'a pas d'effet à l'extérieur de f().
Si vraiment tu veux une directive using globale, tu peux la mettre dans un .cpp, mais jamais dans un .h. Si tu enfreins cette règle, tout fichier source qui inclut ledit header inclura aussi la directive using, même si tu ne le désires pas, et même si tu as des collisions de noms.
=> jamais de using dans un .h
-- Andre Heinen My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
On 07 Dec 2004 14:20:48 +0100, Gabriel Dos Reis wrote:
Vraiment ?
Donne-nous donc un exemple, au lieu de poser des énigmes...
-- Andre Heinen My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
Gabriel Dos Reis
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...
c'est toi qui énonces des règles. Tu dois pouvoir répondre aux questions qu'elles soulèvent -- autrement c'est de l'intégrisme.
-- Gaby
Andre Heinen <nospam@nospam.invalid> writes:
| On 07 Dec 2004 14:20:48 +0100, Gabriel Dos Reis
| <gdr@integrable-solutions.net> wrote:
|
| >Vraiment ?
|
| Donne-nous donc un exemple, au lieu de poser des énigmes...
c'est toi qui énonces des règles. Tu dois pouvoir répondre aux
questions qu'elles soulèvent -- autrement c'est de l'intégrisme.
| On 07 Dec 2004 14:20:48 +0100, Gabriel Dos Reis | wrote: | | >Vraiment ? | | Donne-nous donc un exemple, au lieu de poser des énigmes...
c'est toi qui énonces des règles. Tu dois pouvoir répondre aux questions qu'elles soulèvent -- autrement c'est de l'intégrisme.
-- Gaby
Sayajin
"Gabriel Dos Reis" a écrit dans le message de news:
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...
c'est toi qui énonces des règles. Tu dois pouvoir répondre aux questions qu'elles soulèvent -- autrement c'est de l'intégrisme.
Nous y voilà : du terrorisme maintenant ! Quelle réparti :o)
"Gabriel Dos Reis" <gdr@integrable-solutions.net> a écrit dans le message de
news: m31xe2xf2q.fsf@uniton.integrable-solutions.net...
Andre Heinen <nospam@nospam.invalid> writes:
| On 07 Dec 2004 14:20:48 +0100, Gabriel Dos Reis
| <gdr@integrable-solutions.net> wrote:
|
| >Vraiment ?
|
| Donne-nous donc un exemple, au lieu de poser des énigmes...
c'est toi qui énonces des règles. Tu dois pouvoir répondre aux
questions qu'elles soulèvent -- autrement c'est de l'intégrisme.
Nous y voilà : du terrorisme maintenant ! Quelle réparti :o)
"Gabriel Dos Reis" a écrit dans le message de news:
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...
c'est toi qui énonces des règles. Tu dois pouvoir répondre aux questions qu'elles soulèvent -- autrement c'est de l'intégrisme.
Nous y voilà : du terrorisme maintenant ! Quelle réparti :o)
Gabriel Dos Reis
"Sayajin" writes:
| "Gabriel Dos Reis" a écrit dans le message de | news: | > 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... | > | > c'est toi qui énonces des règles. Tu dois pouvoir répondre aux | > questions qu'elles soulèvent -- autrement c'est de l'intégrisme. | > | | Nous y voilà : du terrorisme maintenant !
Vraiment ?
| Quelle réparti :o)
J'aime comprendre les règles. En particulier, lorsqu'elles semblent en contradiction avec d'autres pratiques saines, comme « namespace composition », documentée dans TC++PL3.
-- Gaby
"Sayajin" <metalkura@wanadoo.fr> writes:
| "Gabriel Dos Reis" <gdr@integrable-solutions.net> a écrit dans le message de
| news: m31xe2xf2q.fsf@uniton.integrable-solutions.net...
| > Andre Heinen <nospam@nospam.invalid> writes:
| >
| > | On 07 Dec 2004 14:20:48 +0100, Gabriel Dos Reis
| > | <gdr@integrable-solutions.net> wrote:
| > |
| > | >Vraiment ?
| > |
| > | Donne-nous donc un exemple, au lieu de poser des énigmes...
| >
| > c'est toi qui énonces des règles. Tu dois pouvoir répondre aux
| > questions qu'elles soulèvent -- autrement c'est de l'intégrisme.
| >
|
| Nous y voilà : du terrorisme maintenant !
Vraiment ?
| Quelle réparti :o)
J'aime comprendre les règles. En particulier, lorsqu'elles semblent en
contradiction avec d'autres pratiques saines, comme
« namespace composition », documentée dans TC++PL3.
| "Gabriel Dos Reis" a écrit dans le message de | news: | > 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... | > | > c'est toi qui énonces des règles. Tu dois pouvoir répondre aux | > questions qu'elles soulèvent -- autrement c'est de l'intégrisme. | > | | Nous y voilà : du terrorisme maintenant !
Vraiment ?
| Quelle réparti :o)
J'aime comprendre les règles. En particulier, lorsqu'elles semblent en contradiction avec d'autres pratiques saines, comme « namespace composition », documentée dans TC++PL3.
-- Gaby
Andre Heinen
On 07 Dec 2004 17:12:29 +0100, Gabriel Dos Reis wrote:
c'est toi qui énonces des règles. Tu dois pouvoir répondre aux questions qu'elles soulèvent -- autrement c'est de l'intégrisme.
C'est vrai, c'est pour ça que tu réponds si souvent "vraiment?" ou "ah oui?" ? :-)
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.
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.
Pas d'accord?
-- Andre Heinen My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
On 07 Dec 2004 17:12:29 +0100, Gabriel Dos Reis
<gdr@integrable-solutions.net> wrote:
c'est toi qui énonces des règles. Tu dois pouvoir répondre aux
questions qu'elles soulèvent -- autrement c'est de l'intégrisme.
C'est vrai, c'est pour ça que tu réponds si souvent "vraiment?"
ou "ah oui?" ? :-)
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.
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.
Pas d'accord?
--
Andre Heinen
My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
On 07 Dec 2004 17:12:29 +0100, Gabriel Dos Reis wrote:
c'est toi qui énonces des règles. Tu dois pouvoir répondre aux questions qu'elles soulèvent -- autrement c'est de l'intégrisme.
C'est vrai, c'est pour ça que tu réponds si souvent "vraiment?" ou "ah oui?" ? :-)
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.
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.
Pas d'accord?
-- Andre Heinen My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz