Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

c++ manipulation bit

18 réponses
Avatar
paolo_3
voici un prog mai sme fais erreur a cause du void voudrais decaler
donc bit mais sans les perdre
exemple: 00101111
en : 10111100

voici le prog:
#include <fstream>
int main()
{
using std::ifstream;
using std::ofstream;
ifstream ifs("c:\\temp/plo.jpg", std::ios::binary);
ofstream ofs("c:\\temp/plo.gio",std::ios::binary);
//
// on lit et on =E9crit un octet =E0 la fois, mais c'est tr=E8s rapide
car les flux standard
// en entr=E9e et en sortie proc=E8dent =E0 des acc=E8s optimis=E9s au m=
=E9dia
sous-jacent (acc=E8s
// en bloc et une ant=E9m=E9moire pour les donn=E9es disponibles).
//
char c;

int n;
n=3D2;

while (ifs.get(c)) {

void shift_left(unsigned char *c,
unsigned int n) {
n=3Dn%CHAR_BIT; /* make sure that n<CHAR_BIT */
unsigned char tmp=3D(*c)>>(CHAR_BIT-n);
*c=3D((*c)<<n)|tmp;
}

ofs.put(c);

} }

erreur de compilation :
C:\Program Files\CodeBlocks\MinGW\essai3\main.cpp||In function 'int
main()':|
C:\Program Files\CodeBlocks\MinGW\essai3\main.cpp|21|error: a function-
definition is not allowed here before '{' token|
||=3D=3D=3D Build finished: 1 errors, 0 warnings =3D=3D=3D|


merci

10 réponses

1 2
Avatar
Marc
paolo_3 wrote:

erreur de compilation :
C:Program FilesCodeBlocksMinGWessai3main.cpp||In function 'int
main()':|
C:Program FilesCodeBlocksMinGWessai3main.cpp|21|error: a function-
definition is not allowed here before '{' token|



Bonjour,

qu'est-ce qui n'est pas clair dans ce message ? Le compilateur dit
qu'il est en train de lire la définition de la fonction main et qu'il
est interdit de définir une autre fonction ici (i.e. à l'intérieur de
main), donc peut-être faudrait-il la définir ailleurs ?
Avatar
Wykaaa
paolo_3 a écrit :
voici un prog mai sme fais erreur a cause du void voudrais decaler
donc bit mais sans les perdre
exemple: 00101111
en : 10111100

voici le prog:
#include <fstream>
int main()
{
using std::ifstream;
using std::ofstream;
ifstream ifs("c:temp/plo.jpg", std::ios::binary);
ofstream ofs("c:temp/plo.gio",std::ios::binary);
//
// on lit et on écrit un octet à la fois, mais c'est très rapide
car les flux standard
// en entrée et en sortie procèdent à des accès optimisés au média
sous-jacent (accès
// en bloc et une antémémoire pour les données disponibles).
//
char c;

int n;
n=2;

while (ifs.get(c)) {

void shift_left(unsigned char *c,
unsigned int n) {
n=n%CHAR_BIT; /* make sure that n<CHAR_BIT */
unsigned char tmp=(*c)>>(CHAR_BIT-n);
*c=((*c)<<n)|tmp;
}

ofs.put(c);

} }

erreur de compilation :
C:Program FilesCodeBlocksMinGWessai3main.cpp||In function 'int
main()':|
C:Program FilesCodeBlocksMinGWessai3main.cpp|21|error: a function-
definition is not allowed here before '{' token|
||=== Build finished: 1 errors, 0 warnings ===|


merci



En C et C++ on ne peut pas définir de fonction à l'intérieur d'une autre
fonction, même si c'est le "main".
Avatar
paolo_3
On Oct 10, 1:12 pm, Wykaaa wrote:
paolo_3 a crit :





> voici un prog mai sme fais erreur a cause du void  voudrais decaler
> donc bit mais sans les perdre
> exemple:  00101111
> en :          10111100

> voici le prog:
> #include <fstream>
> int main()
> {
>    using std::ifstream;
>    using std::ofstream;
>    ifstream ifs("c:temp/plo.jpg",  std::ios::binary);
>    ofstream ofs("c:temp/plo.gio",std::ios::binary);
>    //
>    // on lit et on crit un octet la fois, mais c'est tr s rapide
> car les flux standard
>    // en entr e et en sortie proc dent des acc s optimis s au m dia
> sous-jacent (acc s
>    // en bloc et une ant m moire pour les donn es disponibles).
>    //
>     char c;

> int n;
> n=2;

>     while (ifs.get(c)) {

> void shift_left(unsigned char *c,
>                 unsigned int n) {
>    n=n%CHAR_BIT; /* make sure that n<CHAR_BIT */
>    unsigned char tmp=(*c)>>(CHAR_BIT-n);
>    *c=((*c)<<n)|tmp;
> }

> ofs.put(c);

> }   }

> erreur de compilation :
> C:Program FilesCodeBlocksMinGWessai3main.cpp||In function 'int
> main()':|
> C:Program FilesCodeBlocksMinGWessai3main.cpp|21|error: a function-
> definition is not allowed here before '{' token|
> ||=== Build finished: 1 errors, 0 warnings ===|

> merci

En C et C++ on ne peut pas d finir de fonction l'int rieur d'une autre
fonction, m me si c'est le "main".- Hide quoted text -

- Show quoted text -



si j'elimine le main me fera d'autre erreur ..alors comment faire ou
une autre solution qui arrive au meme resultat?
merci
Avatar
espie
In article ,
paolo_3 wrote:

si j'elimine le main me fera d'autre erreur ..alors comment faire ou
une autre solution qui arrive au meme resultat?
merci



Faudrait expliquer un peu mieux ton probleme.

Ca ressemble a des fragments de code C++ mis ensemble par quelqu'un qui
n'y comprend vraiment rien.

Pourquoi C++ ? Est-ce que c'est plus qu'un exercice de cours
que tu essaies de faire faire par les membres de ce newsgroup ?

D'un cote il y a des constructions un peu complexes. De l'autre, des
concepts aussi basiques que la notion de fonction n'ont pas l'air maitrisees
du tout. Si tu tiens vraiment a le faire en C++, ben je pense qu'il va falloir
apprendre un peu de C++...
Avatar
Wykaaa
paolo_3 a écrit :
On Oct 10, 1:12 pm, Wykaaa wrote:
paolo_3 a crit :





voici un prog mai sme fais erreur a cause du void voudrais decaler
donc bit mais sans les perdre
exemple: 00101111
en : 10111100
voici le prog:




} }
erreur de compilation :
C:Program FilesCodeBlocksMinGWessai3main.cpp||In function 'int
main()':|
C:Program FilesCodeBlocksMinGWessai3main.cpp|21|error: a function-
definition is not allowed here before '{' token|
||=== Build finished: 1 errors, 0 warnings ===|
merci


En C et C++ on ne peut pas d finir de fonction l'int rieur d'une autre
fonction, m me si c'est le "main".- Hide quoted text -

- Show quoted text -



si j'elimine le main me fera d'autre erreur ..alors comment faire ou
une autre solution qui arrive au meme resultat?
merci



Il faut juste "sortir" la fonction shift_left du main et l'appeler dans
la boucle while.
Attention, je n'ai pas vérifié le programme, j'ai juste déplacé la
fonction shift_left et mis l'appel dans la boucle.

Comme ceci :

#include <fstream>

void shift_left(unsigned char *c, unsigned int n)
{
n=n%CHAR_BIT; /* make sure that n<CHAR_BIT */
unsigned char tmp=(*c)>>(CHAR_BIT-n);
*c=((*c)<<n)|tmp;
}
int main()
{
using std::ifstream;
using std::ofstream;
ifstream ifs("c:temp/plo.jpg", std::ios::binary);
ofstream ofs("c:temp/plo.gio",std::ios::binary);
//
// on lit et on crit un octet la fois, mais c'est tr s rapide
car les flux standard
// en entr e et en sortie proc dent des acc s optimis s au m dia
sous-jacent (acc s
// en bloc et une ant m moire pour les donn es disponibles).
//
char c;
int n;
n=2;
while (ifs.get(c))
{
shift_left(c, n);
}
ofs.put(c);
}
Avatar
paolo_3
On Oct 10, 7:45 pm, Wykaaa wrote:
paolo_3 a crit :





> On Oct 10, 1:12 pm, Wykaaa wrote:
>> paolo_3 a crit :

>>> voici un prog mai sme fais erreur a cause du void  voudrais decaler
>>> donc bit mais sans les perdre
>>> exemple:  00101111
>>> en :          10111100
>>> voici le prog:

>>> }   }
>>> erreur de compilation :
>>> C:Program FilesCodeBlocksMinGWessai3main.cpp||In function 'int
>>> main()':|
>>> C:Program FilesCodeBlocksMinGWessai3main.cpp|21|error: a functio n-
>>> definition is not allowed here before '{' token|
>>> ||=== Build finished: 1 errors, 0 warnings ===|
>>> merci
>> En C et C++ on ne peut pas d finir de fonction l'int rieur d'une autre
>> fonction, m me si c'est le "main".- Hide quoted text -

>> - Show quoted text -

> si j'elimine le main me fera d'autre erreur ..alors comment faire ou
> une autre solution qui arrive au meme resultat?
> merci

Il faut juste "sortir" la fonction shift_left du main et l'appeler dans
la boucle while.
Attention, je n'ai pas v rifi le programme, j'ai juste d plac la
fonction shift_left et mis l'appel dans la boucle.

Comme ceci :

#include <fstream>

void shift_left(unsigned char *c, unsigned int n)
{
     n=n%CHAR_BIT; /* make sure that n<CHAR_BIT */
     unsigned char tmp=(*c)>>(CHAR_BIT-n);
     *c=((*c)<<n)|tmp;}

int main()
  {
     using std::ifstream;
     using std::ofstream;
     ifstream ifs("c:temp/plo.jpg",  std::ios::binary);
     ofstream ofs("c:temp/plo.gio",std::ios::binary);
     //
     // on lit et on crit un octet la fois, mais c'est tr s rapide
  car les flux standard
     // en entr e et en sortie proc dent des acc s optimis s au m d ia
  sous-jacent (acc s
     // en bloc et une ant m moire pour les donn es disponibles).
     //
      char c;
  int n;
  n=2;
      while (ifs.get(c))
{
        shift_left(c, n);



}
ofs.put(c);
}- Hide quoted text -

- Show quoted text -- Hide quoted text -

- Show quoted text -



salut merci essayer mais me fais erreur

C:Program FilesCodeBlocksMinGWessai3main.cpp||In function 'int
main()':|
C:Program FilesCodeBlocksMinGWessai3main.cpp|33|error: invalid
conversion from 'char' to 'unsigned char*'|
C:Program FilesCodeBlocksMinGWessai3main.cpp|33|error:
initializing argument 1 of 'void shift_left(unsigned char*, unsigned
int)'|
||=== Build finished: 2 errors, 0 warnings ===|

malheuresement dans le void l erreur est la je connais pas voici le
prg.

#include <fstream>
#include <stdio.h>
#include <limits.h>
#include <iostream>
char c;
int n;
void shift_left(unsigned char *c, unsigned int n)
{
n=n%CHAR_BIT; /* make sure that n<CHAR_BIT */
unsigned char tmp=(*c)>>(CHAR_BIT-n);
*c=((*c)<<n)|tmp;
}

int main()

{
using std::ifstream;
using std::ofstream;
ifstream ifs("c:temp/plo.jpg", std::ios::binary);
ofstream ofs("c:temp/plo.gio",std::ios::binary);
//
// on lit et on écrit un octet à la fois, mais c'est très rapide
car les flux standard
// en entrée et en sortie procèdent à des accès optimisés au m édia
sous-jacent (accès
// en bloc et une antémémoire pour les données disponibles).
//

while (ifs.get(c)) {
{
shift_left(c, n);

}
ofs.put(c);

} }
Avatar
Lucas Levrel
Il va te falloir apprendre des rudiments d'anglais. Si tu viens poster ici
à chaque fois que tu as un message d'erreur, il va se passer quelques mois
avant que ton programme compile :-)

Le 16 octobre 2011, paolo_3 a écrit :
salut merci essayer mais me fais erreur

C:Program FilesCodeBlocksMinGWessai3main.cpp||In function 'int
main()':|



« Dans la fonction main()... »

C:Program FilesCodeBlocksMinGWessai3main.cpp|33|error: invalid
conversion from 'char' to 'unsigned char*'|



« ... ligne 33, conversion invalide de "char" vers "unsigned char*"... »

C:Program FilesCodeBlocksMinGWessai3main.cpp|33|error:
initializing argument 1 of 'void shift_left(unsigned char*, unsigned
int)'|



« ... lors de l'initialisation de l'argument nº 1 de la fonction
shift_left. »

Ligne 33 c'est celle-là :

shift_left(c, n);



À la lumière des messages d'erreur, essaye de comprendre par toi-même...
(Indice : quel est le type de "c" ?)

--
LL
Avatar
paolo_3
On Oct 17, 9:40 am, Lucas Levrel wrote:
Il va te falloir apprendre des rudiments d'anglais. Si tu viens poster ic i
à chaque fois que tu as un message d'erreur, il va se passer quelques m ois
avant que ton programme compile :-)

Le 16 octobre 2011, paolo_3 a écrit :

> salut merci essayer mais me fais erreur

> C:Program FilesCodeBlocksMinGWessai3main.cpp||In function 'int
> main()':|

« Dans la fonction main()... »

> C:Program FilesCodeBlocksMinGWessai3main.cpp|33|error: invalid
> conversion from 'char' to 'unsigned char*'|

« ... ligne 33, conversion invalide de "char" vers "unsigned char*".. . »

> C:Program FilesCodeBlocksMinGWessai3main.cpp|33|error:
> initializing argument 1 of 'void shift_left(unsigned char*, unsigned
> int)'|

« ... lors de l'initialisation de l'argument nº 1 de la fonction
shift_left. »

Ligne 33 c'est celle-là :

>        shift_left(c, n);

À la lumière des messages d'erreur, essaye de comprendre par toi-mê me...
(Indice : quel est le type de "c" ?)

--
LL



je comprend mais je vois pas c c'est un char ...donc je vois pas
cequ'il veu de plus
j'ai essaie de le retirer comme je penser
unsigned char *b
fesais comme si je le declarer charmais me dit que mmanque le char..
c'est vrai je suis debutant jessaie de comprendre mais je trouve pas
ce que je recherche sinon je viendrais pas ici est ecrie
maisprobleme ..enfin je copie est je colle quand ca m'arrange mais je
modifie aussi ,j'essaie de faire quelque chose ...mais je de la peine
c'est vrai !
Avatar
paolo_3
On Oct 17, 8:53 pm, paolo_3 wrote:
On Oct 17, 9:40 am, Lucas Levrel wrote:





> Il va te falloir apprendre des rudiments d'anglais. Si tu viens poster ici
> à chaque fois que tu as un message d'erreur, il va se passer quelques mois
> avant que ton programme compile :-)

> Le 16 octobre 2011, paolo_3 a écrit :

> > salut merci essayer mais me fais erreur

> > C:Program FilesCodeBlocksMinGWessai3main.cpp||In function 'int
> > main()':|

> « Dans la fonction main()... »

> > C:Program FilesCodeBlocksMinGWessai3main.cpp|33|error: invalid
> > conversion from 'char' to 'unsigned char*'|

> « ... ligne 33, conversion invalide de "char" vers "unsigned char*" ... »

> > C:Program FilesCodeBlocksMinGWessai3main.cpp|33|error:
> > initializing argument 1 of 'void shift_left(unsigned char*, unsigned
> > int)'|

> « ... lors de l'initialisation de l'argument nº 1 de la fonction
> shift_left. »

> Ligne 33 c'est celle-là :

> >        shift_left(c, n);

> À la lumière des messages d'erreur, essaye de comprendre par toi-m ême...
> (Indice : quel est le type de "c" ?)

> --
> LL

je comprend mais je vois pas c  c'est un char ...donc je vois pas
cequ'il veu de plus
j'ai essaie de le retirer comme je penser
unsigned char *b
fesais comme si je le declarer charmais me dit que mmanque le char..
c'est vrai je suis debutant jessaie de comprendre mais je trouve pas
ce que je recherche sinon je viendrais pas ici est ecrie
maisprobleme ..enfin je copie est je colle quand ca m'arrange mais je
modifie aussi ,j'essaie de faire quelque chose ...mais je de la peine
c'est vrai  !- Hide quoted text -

- Show quoted text -



voila je devais declarer
unsigned char *c
est la il compile ok pas d'erreur
Avatar
Lucas Levrel
Le 17 octobre 2011, paolo_3 a écrit :
c'est vrai je suis debutant jessaie de comprendre mais je trouve pas
ce que je recherche sinon je viendrais pas ici est ecrie
maisprobleme ..enfin

je copie est je colle quand ca m'arrange mais je modifie aussi
,j'essaie de faire quelque chose ...mais je de la peine c'est vrai  !





À mon avis, tu n'y arriveras jamais comme ça. Il faut que tu te trouves un
livre (ou un cours en ligne) d'apprentissage du C++.

voila je devais declarer
unsigned char *c
est la il compile ok pas d'erreur



Qu'il compile est une chose, que l'exécutable obtenu fonctionne
correctement (et conformément à ce qu'on souhaite) en est une autre...

--
LL
1 2