OVH Cloud OVH Cloud

Débutant en C++

9 réponses
Avatar
smu
Bonjour,

Je débute en C++ sous Microsoft Visual C++ 6.0.

J'ai les sources suivants qui me pose un petit problème :

----- socketClass.h -----
#ifndef SOCKET_CLASS_HEADER__
#define SOCKET_CLASS_HEADER__

#include <winsock2.h>
#include <string>

class Socket
{
public:
Socket();
virtual ~Socket();

// Server initialization
bool create();
bool bind(const int port);
bool listen() const;
bool accept(Socket&) const;
// Client initialization
bool connect(const std::string host, const int port);
// Data transmission
bool send(const std::string) const;
int recv(std::string&) const;
// Tools
void set_non_blocking(const bool);
bool is_valid() const;

private:
int m_sock;
sockaddr_in m_addr;
};

#endif /* SOCKET_CLASS_HEADER__ */

----- ClientServer.cpp -----
#include "socketClass.h"

int main(int, char*)
{
return 0;
}

Quand je compile ce programme qui ne fait rien, le compilateur m'envoie un
nombre impressionnant de warning :

c:\program files\microsoft visual studio\vc98\include\xmemory(39) : warning
C4100: '_P' : unreferenced formal parameter
c:\program files\microsoft visual studio\vc98\include\xmemory(41) : warning
C4100: '_P' : unreferenced formal parameter
c:\program files\microsoft visual studio\vc98\include\xlocale(242) : warning
C4511: 'codecvt_base' : copy constructor could not be generated
c:\program files\microsoft visual studio\vc98\include\xlocale(223) :
see declaration of 'codecvt_base'
c:\program files\microsoft visual studio\vc98\include\xlocale(242) : warning
C4512: 'codecvt_base' : assignment operator could not be generated
c:\program files\microsoft visual studio\vc98\include\xlocale(223) :
see declaration of 'codecvt_base'
c:\program files\microsoft visual studio\vc98\include\xlocale(296) : warning
C4663: C++ language change: to explicitly specialize class template
'codecvt' use the following syntax:
template<> class codecvt<unsigned short,char,int> ...
c:\program files\microsoft visual studio\vc98\include\xlocale(398) : warning
C4511: 'codecvt<unsigned short,char,int>' : copy constructor could not be
generated
c:\program files\microsoft visual studio\vc98\include\xlocale(296) :
see declaration of 'codecvt<unsigned short,char,int>'
c:\program files\microsoft visual studio\vc98\include\xlocale(398) : warning
C4512: 'codecvt<unsigned short,char,int>' : assignment operator could not be
generated
c:\program files\microsoft visual studio\vc98\include\xlocale(296) :
see declaration of 'codecvt<unsigned short,char,int>'
c:\program files\microsoft visual studio\vc98\include\xlocale(387) : warning
C4018: '<' : signed/unsigned mismatch
c:\program files\microsoft visual studio\vc98\include\xlocale(420) : warning
C4511: 'ctype_base' : copy constructor could not be generated
c:\program files\microsoft visual studio\vc98\include\xlocale(410) :
see declaration of 'ctype_base'
c:\program files\microsoft visual studio\vc98\include\xlocale(420) : warning
C4512: 'ctype_base' : assignment operator could not be generated
c:\program files\microsoft visual studio\vc98\include\xlocale(410) :
see declaration of 'ctype_base'
c:\program files\microsoft visual studio\vc98\include\xlocale(519) : warning
C4663: C++ language change: to explicitly specialize class template 'ctype'
use the following syntax:
template<> class ctype<char> ...
c:\program files\microsoft visual studio\vc98\include\xlocale(611) : warning
C4511: 'ctype<char>' : copy constructor could not be generated
c:\program files\microsoft visual studio\vc98\include\xlocale(519) :
see declaration of 'ctype<char>'
c:\program files\microsoft visual studio\vc98\include\xlocale(611) : warning
C4512: 'ctype<char>' : assignment operator could not be generated
c:\program files\microsoft visual studio\vc98\include\xlocale(519) :
see declaration of 'ctype<char>'
c:\program files\microsoft visual studio\vc98\include\xlocale(552) : warning
C4100: '_D' : unreferenced formal parameter
c:\program files\microsoft visual studio\vc98\include\xlocale(554) : warning
C4100: '_D' : unreferenced formal parameter
c:\program files\microsoft visual studio\vc98\include\ostream(50) : warning
C4512: 'sentry' : assignment operator could not be generated
c:\program files\microsoft visual studio\vc98\include\ostream(38) :
see declaration of 'sentry'
c:\program files\microsoft visual studio\vc98\include\ostream(373) :
see reference to class template instantiation
'std::basic_ostream<char,struct std::char_traits<char> >' being compiled
c:\program files\microsoft visual studio\vc98\include\ostream(50) : warning
C4512: 'sentry' : assignment operator could not be generated
c:\program files\microsoft visual studio\vc98\include\ostream(38) :
see declaration of 'sentry'
c:\program files\microsoft visual studio\vc98\include\ostream(379) :
see reference to class template instantiation 'std::basic_ostream<unsigned
short,struct std::char_traits<unsigned short> >' being compiled
c:\program files\microsoft visual studio\vc98\include\xlocale(513) : warning
C4511: 'ctype<unsigned short>' : copy constructor could not be generated
c:\program files\microsoft visual studio\vc98\include\istream(573) :
see reference to class template instantiation 'std::ctype<unsigned short>'
being compiled
c:\program files\microsoft visual studio\vc98\include\xlocale(513) : warning
C4512: 'ctype<unsigned short>' : assignment operator could not be generated
c:\program files\microsoft visual studio\vc98\include\istream(573) :
see reference to class template instantiation 'std::ctype<unsigned short>'
being compiled
c:\program files\microsoft visual studio\vc98\include\streambuf(181) :
warning C4100: '_Loc' : unreferenced formal parameter
c:\program files\microsoft visual studio\vc98\include\streambuf(182)
: while compiling class-template member function 'void __thiscall
std::basic_streambuf<char,struct std::char_traits<char> >::imbue(const class
std::locale &)'
c:\program files\microsoft visual studio\vc98\include\streambuf(181) :
warning C4100: '_Loc' : unreferenced formal parameter
c:\program files\microsoft visual studio\vc98\include\streambuf(182)
: while compiling class-template member function 'void __thiscall
std::basic_streambuf<unsigned short,struct std::char_traits<unsigned short>
>::imbue(const class std::loca
le &)'
c:\program files\microsoft visual studio\vc98\include\xstring(600) : warning
C4245: 'initializing' : conversion from 'const int' to 'const unsigned int',
signed/unsigned mismatch
c:\program files\microsoft visual studio\vc98\include\xmemory(59) :
while compiling class-template static data member 'const unsigned int
std::basic_string<char,std::char_traits<char>,std::allocator<char> >::npos'

ClientServer.obj - 0 error(s), 22 warning(s)

J'y suis peut-être aller un peu fort avec le "Warning level" réglé à "Level
4".
Mais existe t-il une solution autre que de réduire le niveau d'alerte ?

D'avance merci

smu

9 réponses

Avatar
Loïc Joly
smu wrote:
Bonjour,

Je débute en C++ sous Microsoft Visual C++ 6.0.
[...]


J'y suis peut-être aller un peu fort avec le "Warning level" réglé à "Level
4".
Mais existe t-il une solution autre que de réduire le niveau d'alerte ?


Pas vraiment. Il est connu qu'avec le niveau de warning 4, la plupart
des .h livrés avec le compilateur VC++6.0 deviennent très locaces.
Perso, sous ce compilo, j'utilise le niveau 3, et je désactive quelques
warnings 1 par 1 (en particulier, celui sur des noms de variables trop
longs pour le debuggeur, qui apparaît souvent des qu'on utilise de
templates, c'est à dire tout le temps).

Je n'ai pas vérifié ce que ça donne avec des versions plus récentes.

--
Loïc

Avatar
Andre Heinen
On Thu, 26 Aug 2004 12:04:49 +0200, Loïc Joly
wrote:

smu wrote:
Bonjour,

Je débute en C++ sous Microsoft Visual C++ 6.0.
[...]


J'y suis peut-être aller un peu fort avec le "Warning level" réglé à "Level
4".
Mais existe t-il une solution autre que de réduire le niveau d'alerte ?


Pas vraiment. Il est connu qu'avec le niveau de warning 4, la plupart
des .h livrés avec le compilateur VC++6.0 deviennent très locaces.
Perso, sous ce compilo, j'utilise le niveau 3, et je désactive quelques
warnings 1 par 1 (en particulier, celui sur des noms de variables trop
longs pour le debuggeur, qui apparaît souvent des qu'on utilise de
templates, c'est à dire tout le temps).


En plus d'en désactiver, on peut aussi en changer le niveau. En
particulier, on peut compiler au niveau 3 tout en ramenant
certains warnings importants du 4 vers le 3.
Voir (en anglais) http://oakroadsystems.com/tech/msvc.htm
en bas de la page ("Catch-22 All Over Again").

Je n'ai pas vérifié ce que ça donne avec des versions plus récentes.


Moi non plus...

--
Andre Heinen
My address is "a dot heinen at europeanlink dot com"


Avatar
smu
"Andre Heinen" a écrit dans le message de
news:
On Thu, 26 Aug 2004 12:04:49 +0200, Loïc Joly
wrote:

smu wrote:
Bonjour,

Je débute en C++ sous Microsoft Visual C++ 6.0.
[...]


J'y suis peut-être aller un peu fort avec le "Warning level" réglé à
"Level



4".
Mais existe t-il une solution autre que de réduire le niveau d'alerte ?


Pas vraiment. Il est connu qu'avec le niveau de warning 4, la plupart
des .h livrés avec le compilateur VC++6.0 deviennent très locaces.
Perso, sous ce compilo, j'utilise le niveau 3, et je désactive quelques
warnings 1 par 1 (en particulier, celui sur des noms de variables trop
longs pour le debuggeur, qui apparaît souvent des qu'on utilise de
templates, c'est à dire tout le temps).


En plus d'en désactiver, on peut aussi en changer le niveau. En
particulier, on peut compiler au niveau 3 tout en ramenant
certains warnings importants du 4 vers le 3.
Voir (en anglais) http://oakroadsystems.com/tech/msvc.htm
en bas de la page ("Catch-22 All Over Again").

Je n'ai pas vérifié ce que ça donne avec des versions plus récentes.


Moi non plus...

--
Andre Heinen
My address is "a dot heinen at europeanlink dot com"



Merci à vous deux

--
smu



Avatar
Pierre Maurette
Loïc Joly a écrit:

smu wrote:
Bonjour,

Je débute en C++ sous Microsoft Visual C++ 6.0.
[...]


J'y suis peut-être aller un peu fort avec le "Warning level" réglé à "Level
4".
Mais existe t-il une solution autre que de réduire le niveau d'alerte ?


Pas vraiment. Il est connu qu'avec le niveau de warning 4, la plupart
des .h livrés avec le compilateur VC++6.0 deviennent très locaces.
Perso, sous ce compilo, j'utilise le niveau 3, et je désactive quelques
warnings 1 par 1 (en particulier, celui sur des noms de variables trop
longs pour le debuggeur, qui apparaît souvent des qu'on utilise de
templates, c'est à dire tout le temps).

Je n'ai pas vérifié ce que ça donne avec des versions plus récentes.
Vous pouvez regarder le #pragma warning, présent en version 6.0 et

7.1. Ça doit le faire, en désactivant les ouharninges avant le
#includes.
C'est marrant, je me demande si MASM qui n'est pas maintenu (pour ce
qui est de l'interface) depuis une éternité n'est pas plus efficace
dans ce genre de trucs, génération de listing, etc. que VS .NET 2003!
--
Pierre


Avatar
K. Ahausse
"Pierre Maurette" a écrit dans le message de
news:
Loïc Joly a écrit:

smu wrote:
Bonjour,

Je débute en C++ sous Microsoft Visual C++ 6.0.
[...]


J'y suis peut-être aller un peu fort avec le "Warning level" réglé à
"Level



4".
Mais existe t-il une solution autre que de réduire le niveau d'alerte ?


Pas vraiment. Il est connu qu'avec le niveau de warning 4, la plupart
des .h livrés avec le compilateur VC++6.0 deviennent très locaces.
Perso, sous ce compilo, j'utilise le niveau 3, et je désactive quelques
warnings 1 par 1 (en particulier, celui sur des noms de variables trop
longs pour le debuggeur, qui apparaît souvent des qu'on utilise de
templates, c'est à dire tout le temps).

Je n'ai pas vérifié ce que ça donne avec des versions plus récentes.
Vous pouvez regarder le #pragma warning, présent en version 6.0 et

7.1. Ça doit le faire, en désactivant les ouharninges avant le
#includes.
C'est marrant, je me demande si MASM qui n'est pas maintenu (pour ce


Et c'est bien regrettable de ne plus disposer de l'assembleur, Mmfffin, il
reste _asm. Mais un bon, ça ne vaut pas le macro-assembleur, surtout pour
l'aspect macro qui etait GEANT.


qui est de l'interface) depuis une éternité n'est pas plus efficace
dans ce genre de trucs, génération de listing, etc. que VS .NET 2003!
--
Pierre




Avatar
M. B.
"K. Ahausse" a écrit dans le message
de news: cgkomv$19q$
Et c'est bien regrettable de ne plus disposer de l'assembleur, Mmfffin, il
reste _asm. Mais un bon, ça ne vaut pas le macro-assembleur, surtout pour
l'aspect macro qui etait GEANT.



Le mieux c'etait quand meme quand on programmait directement en
langage machine sur un clavier hexadecimal a 16 touches.

On prenait le databook du processeur pour compiler a la main.
Du temps du Motorola 6800.

Si si ...

Le top !!

MB

Avatar
Jean-Noël Mégoz
"M. B." a écrit dans le message de
news:cgl7s4$bun$

Le mieux c'etait quand meme quand on programmait directement en
langage machine sur un clavier hexadecimal a 16 touches.



Un clavier ?
Alors que les fiches perforées étaient si pratiques ! ;)

Avatar
K. Ahausse
"Jean-Noël Mégoz" a écrit dans le message de
news:412e530f$0$23242$

"M. B." a écrit dans le message de
news:cgl7s4$bun$

Le mieux c'etait quand meme quand on programmait directement en
langage machine sur un clavier hexadecimal a 16 touches.



Un clavier ?
Alors que les fiches perforées étaient si pratiques ! ;)


Et la saisie du code-op aux clefs en face avant.
Il valait mieux etre deux un qui dicte l'autre qui manipule.
Du : ProtoExtremProgramming en quelque sorte :-)


Avatar
kanze
"M. B." wrote in message
news:<cgl7s4$bun$...
"K. Ahausse" a écrit dans le message
de news: cgkomv$19q$
Et c'est bien regrettable de ne plus disposer de l'assembleur,
Mmfffin, il reste _asm. Mais un bon, ça ne vaut pas le
macro-assembleur, surtout pour l'aspect macro qui etait GEANT.


Le mieux c'etait quand meme quand on programmait directement en
langage machine sur un clavier hexadecimal a 16 touches.


Tu veux dire un rang de 16 touches, pour l'adresse, et un rang de 16
touches, pour les données, chacun surmonté d'un voyant. Avec quelque
boutons en plus pour écrire, lire, etc.

Mais c'était déjà assez moderne.

On prenait le databook du processeur pour compiler a la main. Du temps
du Motorola 6800.


Jeunot. Et l'IBM 1401 ? (Mais on ne nous laissait pas toucher, celui-là.
On laissait les cartes le soir, et on récupérait le listing le lendemain
matin. Une machine de 8 bits, 32 Ko de mémoire, dans 8 racks 19 pouces.
Avec un clock de base qui faisait plus de 100 instructions machine par
séconde.)

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34