Forum Programmation.c++ Séparation code/en-tête.

Posté par  (site web personnel) .
Étiquettes : aucune
0
19
déc.
2005
Bonjour,

Je me lance seulement dans le c++.

Jusque là, pour gérer les différentes parties de mon projet, je n'arrivais pas à avoir plusieurs cpp. J'avais une solution "crado" qui consistait à mettre le code dans les .h. Mais bon, le problème est qu'il recompile la totalité du projet à chaque fois, puis bon j'aimerai bien faire quelque chose de propre :).

Je précise que j'utilise kdevelop.

J'ai commencé par tenter de séparer un .cpp et un .h avec un fichier très simple, et j'obtiens ceci:

Function.h:
#ifndef H_FUNCTION
#define H_FUNCTION

using namespace std;
class Convert
{
//public:
std::string Hex(unsigned char Dec);

std::string Bin(unsigned char Dec);
};
#endif


Function.cpp:
#include "Function.h"

std::string Convert::Hex(unsigned char Dec)
{ std::string result;
std::string HexVal="0123456789ABCDEF";

result= HexVal.c_str()[Dec/16];
result += HexVal.c_str()[Dec%16];
return result;
}
std::string Convert::Bin(unsigned char Dec)
{
std::string Result;
int bit=128;
unsigned char Dec2=Dec;
while (bit!=0)
{

if(Dec2/bit)
{
Result+="1";
Dec2=Dec2%bit;
}else
Result+="0";

bit /=2;

}
return Result;
}


Lors de la compilation de Function.cpp, j'obtiens ceci:
[...]
/home/ledev/68hc/simu/src/Function.h:28: error: using-declaration for non-member at class scope
/home/ledev/68hc/simu/src/Function.h:28: error: expected `;' before "Hex"
/home/ledev/68hc/simu/src/Function.h:30: error: using-declaration for non-member at class scope
/home/ledev/68hc/simu/src/Function.h:30: error: expected `;' before "Bin"
[...]
/home/ledev/68hc/simu/src/Function.h:32:7: warning: no newline at end of file
/home/ledev/68hc/simu/src/Function.cpp:3: error: expected constructor, destructor, or type conversion before "Convert"
/home/ledev/68hc/simu/src/Function.cpp:3: error: expected `,' or `;' before "Convert"
/home/ledev/68hc/simu/src/Function.cpp:11: error: expected constructor, destructor, or type conversion before "Convert"
/home/ledev/68hc/simu/src/Function.cpp:11: error: expected `,' or `;' before "Convert"
*** Sortie avec l'état : 2 ***


J'ai tenté de comparer avec les sources de divers projets, mais il me semble n'avoir rien oublié. Quelqu'un aurai une idée?

Merci :).

PS: Désolé d'avoir laissé les retours-chariots, mais je n'arrivais pas à avoir de retour à la ligne sans cela(la balise br étant activée). J'ai jugé plus lisible cette solution :).
  • # oubli?

    Posté par  (site web personnel) . Évalué à 3.

    A la louche et rapidement, il manque un #include<string> dans le .h,
    Difficile de dire si c'est là l'erreur, ou s'il s'agit d'un oubli de recopie du code.

    PS: faire un using dans un .h n'est pas considéré comme une bonne pratique. Cf. n'importe quelle FAQ qui se respecte pour les explications.
    • [^] # Re: oubli?

      Posté par  (site web personnel) . Évalué à 1.

      Bonjour,

      Merci pour vos réponses, le problème était effectivement le #include manquant. Avant que le code soit séparé de l'en-tête, le cpp l'incluait avant d'inclure ce .h, ce qui explique que cela fonctionnait.

      Pour le using std, pour tout avouer, je n'aime de toute façon pas l'utiliser, je trouve plus propre d'utiliser std::. Je l'ai retiré.

      Pour la mise en commentaire de "public:", c'était un test, voir si, par hasard, cela n'arrangeait pas mon problème :).

      Merci encore pour vos réponses.
  • # public

    Posté par  . Évalué à 4.

    J'ajouterai que par defaut, les membres d'une classe sont 'private' (contraiment a un struct), il faut donc que tu decommentes la ligne ou tu a mis :
    // public
    si tu veux pouvoir utiliser tes fonctions membres.

    Comme dis precedemment, il est fortement deconseille d'utiliser des using ds des en-tete (parce que tout fichier qui incluerait ton .h beneficierait du using). Mais comme l'interet du using est de pouvoir s'affranchir des declarations comme 'std::string' au benefice de 'string', ton using est absolument inutile dans ton header et tu peux simplement l'enlever...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.