Fonctions en cpp
Lil
-
neofenix Messages postés 145 Statut Membre -
neofenix Messages postés 145 Statut Membre -
Bonjour,
Bonjour,
J'ai un problème pour structurer mon programme cpp. Je ne suis pas experte en cpp et je suis en train de créer un programme qui contient plusieurs classes. Au moins deux ou trois de ces classes ont besoin d'utiliser des fonctions communes qui elles, utilisent des look-up-tables assez grosses..,Je ne veux pas créer une classe pour y mettre ces fonctions puisque je ne trouve aucun objet à leur associer (mes fonctions s'appliqueront simplement à des int). J'ai essayé de les mettre dans un fichier .cpp avec son .h à part, mais je ne sais pas comment définir l'entête du fichier. J'ai essayé aussi de les déclarer dans le main mais ça ne les rend pas vosobles à l'intérieur des classes. J'ai essayé le mot-clé 'extern' mais ce n'est apparemment pas cela. Y-a-t il un autre moyen de les utiliser sans avoir à les copier à chaque fois dans chacune de mes classe?
merci d'avance pour la réponse
Lil
Bonjour,
J'ai un problème pour structurer mon programme cpp. Je ne suis pas experte en cpp et je suis en train de créer un programme qui contient plusieurs classes. Au moins deux ou trois de ces classes ont besoin d'utiliser des fonctions communes qui elles, utilisent des look-up-tables assez grosses..,Je ne veux pas créer une classe pour y mettre ces fonctions puisque je ne trouve aucun objet à leur associer (mes fonctions s'appliqueront simplement à des int). J'ai essayé de les mettre dans un fichier .cpp avec son .h à part, mais je ne sais pas comment définir l'entête du fichier. J'ai essayé aussi de les déclarer dans le main mais ça ne les rend pas vosobles à l'intérieur des classes. J'ai essayé le mot-clé 'extern' mais ce n'est apparemment pas cela. Y-a-t il un autre moyen de les utiliser sans avoir à les copier à chaque fois dans chacune de mes classe?
merci d'avance pour la réponse
Lil
A voir également:
- Fonctions en cpp
- Dev cpp - Télécharger - Langages
- Codes secrets Android : accéder aux fonctions cachées - Guide
- Camconfig cpp - Forum compta / gestion
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
- [Excel 2010] Remplir cellule d'après contenu d'une autre ✓ - Forum Excel
12 réponses
ca fait un moment que j'ai plus fait de cpp donc je vais essayer de t'aider de memoire.
tu crées tes fonctions dans ton fichier .cpp et tu remets les entetes de chaques fonctions dans ton .h
pour les appeler dans les autres fichiers .cpp ou tu as tes classes. tu mets juste ton #include avec ton fichier .h
Voila, en esperant t'avoir donné la bonne reponse
tu crées tes fonctions dans ton fichier .cpp et tu remets les entetes de chaques fonctions dans ton .h
pour les appeler dans les autres fichiers .cpp ou tu as tes classes. tu mets juste ton #include avec ton fichier .h
Voila, en esperant t'avoir donné la bonne reponse
comment ça ça ne compile pas ???
Je ne voi pas ou est le problème.
fct.h
int fonc1(int);
fct.cpp
#include <fct.h>
int fonc1(int b)
{ return 3*b;}
clas.cpp
#include <fct.h>
class A
{
int c,d;
A(int j):c(j)
{ d=fonc1(c); }
}
Note en passant que a^b ce n'est pas "a" à la puissance "b", mais a SEULEMENT OU b (^ est le ou exclusif bit à bit)
Je ne voi pas ou est le problème.
fct.h
int fonc1(int);
fct.cpp
#include <fct.h>
int fonc1(int b)
{ return 3*b;}
clas.cpp
#include <fct.h>
class A
{
int c,d;
A(int j):c(j)
{ d=fonc1(c); }
}
Note en passant que a^b ce n'est pas "a" à la puissance "b", mais a SEULEMENT OU b (^ est le ou exclusif bit à bit)
voici un exemple de code que je faisait et ça marchais très bien :
et mon fichier .h
et mon fichier ou j'appelle les fonctions:
sinon dit moi quelles sont tes erreurs de compilation
#include "StdAfx.h" #include "ini.h" #define __LCC__ // //#pragma comment(lib, "urlmon.lib") //#include <urlmon.h> //et linker urlmon.lib dans project/settings // #include <stdio.h> #include <mysql.h> #include <conio.h> #include <time.h> #include <iostream> #include <string> #include "odbc.h" #define hostname "xxx.xxx.xxx.xxx" #define user "xxxx" #define password "xxxxx" using namespace waracademy; using namespace std; LPCSTR path="./game.warac"; char chtemp[1000]=""; char chtemp2[1000]=""; char * AlloueEtConcat(char * s1, char * s2) { int longueur; char * s3; longueur=strlen(s1) + strlen(s2) + 1; s3=(char *)malloc(longueur*sizeof(char)); strcpy(s3,s1); strcat(s3,s2); return s3; }
et mon fichier .h
bool CreerIni(char* Log); char * AlloueEtConcat(char * s1, char * s2); char * LireIni(char* cle, char* var); bool RecupNb(char* Log); bool Verif_Adr(char* mail); bool Verif_Poin(char* LeText, unsigned int TextLen); int RecupNbrArmes(int nbr_armes); char* InitList(int flag); char* Insere(char * ch); int NbDestinat(char* ch); void Destinat(char * ch, unsigned int pos, char* LObj, char* LeText, char* LeLog, char* nbdest,char* accuse); bool WriteFile(char *Texte, char* monfichier); bool CreerWarac(char* Log); bool EnvoiArme(char* log, char* choix, char* dest);
et mon fichier ou j'appelle les fonctions:
#include "ini.h" cont=AlloueEtConcat(cont,nb);
sinon dit moi quelles sont tes erreurs de compilation
Merci bcp pour vos réponses..
en fait j'ai l'impression du coup que c'est un #include qui manque soit dans mon .cpp, soit dans le .h: l'erreur que j'ai (qui renvoie à la ligne: int GFq_ad(int , int , int ); dans le .h) est la suivante:
new types may not be defined in a return type
extraneous `int' ignored
on dirait qu'il comprend pas ce qu'est un int ou qqc comme ça
ceci dit, l'erreur provient peut être d'ailleurs.. je ne sais pas
en fait j'ai l'impression du coup que c'est un #include qui manque soit dans mon .cpp, soit dans le .h: l'erreur que j'ai (qui renvoie à la ligne: int GFq_ad(int , int , int ); dans le .h) est la suivante:
new types may not be defined in a return type
extraneous `int' ignored
on dirait qu'il comprend pas ce qu'est un int ou qqc comme ça
ceci dit, l'erreur provient peut être d'ailleurs.. je ne sais pas
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oups.. Effectivement, même quand j'enlève l'include de fich.h, il me reste des erreurs
je rame..
merci en tt cas, mnt c sur que le probleme est ailleurs
je rame..
merci en tt cas, mnt c sur que le probleme est ailleurs
est ce normal que dans ta ligne int GFq_ad(int , int , int ); tu ne mettes pas de variable ca ne serait pas plutot
int GFq_ad(int var1, int var2 , int var3);
int GFq_ad(int var1, int var2 , int var3);
un prototype de fonction ne requiert pas de VARi.
écrire type1 fonction(type2,type3) est tout à fait normal et propre.
Bon, ensuite, si le .h doit être utiliser par d'autre personne et que les paramètres ne sont pas évident, mettre un nom permet de "documenter" la fonction, par exemple :
int strcpy(char * detination, const char* source);
quand tu sais que strcpy copie une chaine de caractère dans une autre, destination et source sont parlant.
Mais à par ça, le type suffit.
écrire type1 fonction(type2,type3) est tout à fait normal et propre.
Bon, ensuite, si le .h doit être utiliser par d'autre personne et que les paramètres ne sont pas évident, mettre un nom permet de "documenter" la fonction, par exemple :
int strcpy(char * detination, const char* source);
quand tu sais que strcpy copie une chaine de caractère dans une autre, destination et source sont parlant.
Mais à par ça, le type suffit.
euh.. oui ca parait plus naturel
j'avais simplement suivi l'exemple de Char Snipeur, et j'ai supprimé le nom de la variable
je vais reesayer donc..
j'avais simplement suivi l'exemple de Char Snipeur, et j'ai supprimé le nom de la variable
je vais reesayer donc..
Mnt mon problème: si ce n'est pas une classe, c'est quoi? je veux dire: comment j'introduis mon fichier? je les met par exemple:
dans fich.h:
int f_ad(int a, int b, int m);
int f_m(int a, int b, int q);
int f_inv(int a, int q);
int f_a(int a, int b);
puis dans fich.cpp
#include <cstdlib>
#include <math.h>
#include <string>
#include "fich.h"
const int log4[4] = {0,0,1,2};
const int log8[8] = {0,0,1,3,2,6,4,5};
const int log16[16] = {0,0,1,4,2,8,5,10,3,14,9,7,6,13,11,12};
const int log32[32] = {0,0,1,18,2,5,19,11,3,29,6,27,20,8,12,23,4,\
10,30,17,7,22,28,26,21,25,9,16,13,14,24,15};
const int log64[64] = {0,0,1,6,2,12,7,26,3,32,13,35,8,48,27,18,4,24,\
33,16,14,52,36,54,9,45,49,38,28,41,19,56,5,62,\
25,11,34,31,17,47,15,23,53,51,37,44,55,40,10,\
61,46,30,50,22,39,43,29,60,42,21,20,59,57,58};
const int log128[128] = {0,0,1,31,2,62,32,103,3,7,63,15,33,84,104,\
93, 4,124,8,121,64,79,16,115,34,11,85,38,105,46,94,51,\
5,82,125,60,9,44,122,77,65,67,80,42,17,69,116,23,35,118,\
12,28,86,25,39,57,106,19,47,89,95,71,52,110,6,14,83,92,126,\
30,61,102,10,37,45,50,123,120,78,114,66,41,68,22,81,59,43,76,\
18,88,70,109,117,27,24,56,36,49,119,113,13,91,29,101,87,108,\
26,55,40,21,58,75,107,54,20,74,48,112,90,100,96,97,72,98,53,73,111,99};
const int log256[256] = {0,0,1,25,2,50,26,198,3,223,51,238,27,104,199,75,4,100,\
224,14,52,141,239,129,28,193,105,248,200,8,76,113,5,138,101,47,225,\
36,15,33,53,147,142,218,240,18,130,69,29,181,194,125,106,39,249,185,\
201,154,9,120,77,228,114,166,6,191,139,98,102,221,48,253,226,152,37,\
179,16,145,34,136,54,208,148,206,143,150,219,189,241,210,19,92,131,\
56,70,64,30,66,182,163,195,72,126,110,107,58,40,84,250,133,186,61,202,\
94,155,159,10,21,121,43,78,212,229,172,115,243,167,87,7,112,192,247,\
140,128,99,13,103,74,222,237,49,197,254,24,227,165,153,119,38,184,180,\
124,17,68,146,217,35,32,137,46,55,63,209,91,149,188,207,205,144,135,151,\
178,220,252,190,97,242,86,211,171,20,42,93,158,132,60,57,83,71,109,65,\
162,31,45,67,216,183,123,164,118,196,23,73,236,127,12,111,246,108,161,59,\
82,41,157,85,170,251,96,134,177,187,204,62,90,203,89,95,176,156,169,160,\
81,11,245,22,235,122,117,44,215,79,174,213,233,230,231,173,232,116,214,\
244,234,168,80,88,175};
const int exp4[3] = {1,2,3};
const int exp8[7] = {1,2,4,3,6,7,5};
const int exp16[15] = {1,2,4,8,3,6,12,11,5,10,7,14,15,13,9};
const int exp32[31] = {1,2,4,8,16,5,10,20,13,26,17,7,14,28,29,31,\
27,19,3,6,12,24,21,15,30,25,23,11,22,9,18};
const int exp64[63] = {1,2,4,8,16,32,3,6,12,24,48,35,5,10,20,40,19,\
38,15,30,60,59,53,41,17,34,7,14,28,56,51,37,\
9,18,36,11,22,44,27,54,47,29,58,55,45,25,50,\
39,13,26,52,43,21,42,23,46,31,62,63,61,57,49,33};
const int exp128[127] = {1,2,4,8,16,32,64,9,18,36,72,25,50,100,65,11,\
22,44,88,57,114,109,83,47,94,53,106,93,51,102,69,3,6,12,24,\
48,96,73,27,54,108,81,43,86,37,74,29,58,116,97,75,31,62,124,\
113,107,95,55,110,85,35,70,5,10,20,40,80,41,82,45,90,61,122,\
125,115,111,87,39,78,21,42,84,33,66,13,26,52,104,89,59,118,101,\
67,15,30,60,120,121,123,127,119,103,71,7,14,28,56,112,105,91,63,\
126,117,99,79,23,46,92,49,98,77,19,38,76,17,34,68};
const int exp256[255] = {1,2,4,8,16,32,64,128,29,58,116,232,205,135,19,38,76,\
152,45,90,180,117,234,201,143,3,6,12,24,48,96,192,157,39,78,156,\
37,74,148,53,106,212,181,119,238,193,159,35,70,140,5,10,20,40,80,\
160,93,186,105,210,185,111,222,161,95,190,97,194,153,47,94,188,101,\
202,137,15,30,60,120,240,253,231,211,187,107,214,177,127,254,\
225,223,163,91,182,113,226,217,175,67,134,17,34,68,136,13,26,52,104,\
208,189,103,206,129,31,62,124,248,237,199,147,59,118,236,197,151,51,\
102,204,133,23,46,92,184,109,218,169,79,158,33,66,132,21,42,84,168,\
77,154,41,82,164,85,170,73,146,57,114,228,213,183,115,230,209,191,99,\
198,145,63,126,252,229,215,179,123,246,241,255,227,219,171,75,150,49,\
98,196,149,55,110,220,165,87,174,65,130,25,50,100,200,141,7,14,28,56,\
112,224,221,167,83,166,81,162,89,178,121,242,249,239,195,155,43,86,172,\
69,138,9,18,36,72,144,61,122,244,245,247,243,251,235,203,139,11,22,44,\
88,176,125,250,233,207,131,27,54,108,216,173,71,142};
int f_ad(int a, int b, int m) const { // xor
int sum=0;
for (int i=0;i<m;i++){
sum=sum+(int)(( (int)((float)(a+b) / pow(2,i)) %2 ) * pow(2,i));
}
return sum ;
}
int f_m(int a, int b, int q) //multiplication
{
if ( a == 0 || b == 0 ) return 0 ;
if ( a == 1 ) return b ;
if ( b == 1 ) return a ;
switch (q){
case 256:
return exp256[(log256[a]+log256[b])%255];
case 128:
return exp128[(log128[a]+log128[b])%127];
case 64:
return exp64[(log64[a]+log64[b])%63];
case 32:
return exp32[(log32[a]+log32[b])%31];
case 16:
return exp16[(log16[a]+log16[b])%15];
case 8:
return exp8[(log8[a]+log8[b])%7];
case 4:
return exp4[(log4[a]+log4[b])%3];
}
cout << "no multiplication..";
return 0 ;
}
int f_inv(int a, int q) //inversion
{
if ( a == 0) cout<<"GFq_inv: no inverse for 0!";
if ( a == 1 ) return 1 ;
switch (q){
case 256:
return exp256[(255-log256[a])];
case 128:
return exp128[(127-log128[a])];
case 64:
return exp64[(63-log64[a])];
case 32:
return exp32[(31-log32[a])];
case 16:
return exp16[(15-log16[a])];
case 8:
return exp8[(7-log8[a])];
case 4:
return exp4[(3-log4[a])];
}
cout<<"f_inv: not defined inverse for GFq";
return 0 ;
}
int f_a(int a, int b) // power
{
return a^b;
}
Après ca compile pas :-(