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 lmg HS (site web personnel) . Évalué à 3.
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 Vador Dark (site web personnel) . Évalué à 1.
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 xmichelo . Évalué à 4.
// 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.