constructeurs et droits d'acces

constructeurs et droits d'acces - C++ - Programmation

Marsh Posté le 12-01-2004 à 12:42:24    

Bonjour,
j'explique ma question a travers un petit exemple :
 

Code :
  1. class maclasse
  2. {
  3.   int i;
  4.   maclasse(const int & _i)
  5.    : i(_i)
  6.   {
  7.   }
  8. public:
  9.   maclasse()
  10.   {
  11.   }
  12.   maclasse membre()
  13.   {
  14.     return maclasse(3);
  15.   }
  16. };


 
je ne comprends pas pourquoi "maclasse(3)" ne fonctionne pas : en effet étant dans une fonction membre de maclasse, je devrais avoir accès aux membres privés, donc au constructeur privé "maclasse(const int & _i)" ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 12-01-2004 à 12:42:24   

Reply

Marsh Posté le 12-01-2004 à 12:44:53    

Il te manque un constructeur par recopie non ?

Reply

Marsh Posté le 12-01-2004 à 12:46:05    

comment ça ça fonctionne pas ?

Reply

Marsh Posté le 12-01-2004 à 13:02:58    

Kristoph a écrit :

Il te manque un constructeur par recopie non ?


quand il n'est pas défini, le constructeur par recopie est implicite et fait une recopie "à plat"

Reply

Marsh Posté le 12-01-2004 à 13:59:35    

apparement si ce que je viens d'ecrire la-haut compile, j'ecris donc exactement ce qui ne compile pas, j'ai du louper qqchose ...

Code :
  1. class base_sock : boost::noncopyable
  2. {
  3. SOCKET s;
  4. base_sock(const SOCKET & _s)
  5.  : s(_s)
  6. {
  7. }
  8. public:
  9. base_sock()
  10.  : s(INVALID_SOCKET)
  11. {
  12.  wsastart();
  13. }
  14. ~base_sock()
  15. {
  16.  wsaclean();
  17. }
  18. base_sock accept() const
  19. {
  20.  sockaddr_in addr;
  21.  int len = sizeof(sockaddr_in);
  22.  SOCKET _s = ::accept(s, (sockaddr*)&addr, &len);
  23.  if(_s == INVALID_SOCKET) throw socket_error();
  24.  return base_sock(_s);
  25. }
  26. };


 
et l'erreur :
error C2558: class 'base_sock' : pas de constructeur de copie disponible ou le constructeur de copie est déclaré 'explicit'


Message édité par blackgoddess le 12-01-2004 à 14:01:11

---------------
-( BlackGoddess )-
Reply

Marsh Posté le 12-01-2004 à 14:06:26    

erf, c'est à cause du boost::noncopyable que ca marche pas ...
 
apparement je ne peux pas surcharger  
noncopyable( const noncopyable& );
par
base_sock(const SOCKET & _s)
 
apparement ca empeche toute surcharge de  
contructeur(const qqchose & );  
?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 12-01-2004 à 14:23:08    

bas comment tu veux que accept retourne un objet par copie dans ce contexte ?

Reply

Marsh Posté le 12-01-2004 à 16:46:51    

rah mais oui chui un boulet, jme disais que j'avais loupé qq chose :p je cherchais une erreur sur la construction de l'objet proprement dite, j'avais absolument pas pensé a la copie implicite au return ...
merci Taz :)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 13-01-2004 à 00:58:22    

Tu nous fais une version C+++++ d'un serveur à chausettes :p Ca commence fort ! Bonne chance.
 
Cordialement,
   Xter.

Reply

Marsh Posté le 13-01-2004 à 01:09:42    

blackgoddess a écrit :

rah mais oui chui un boulet, jme disais que j'avais loupé qq chose :p je cherchais une erreur sur la construction de l'objet proprement dite, j'avais absolument pas pensé a la copie implicite au return ...
merci Taz :)

elle est pas implicite : elle est obligatoire

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed