Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/11/2022, à 18:29

Astrolivier

[résolu]C++ variable de classe not declared in this scope

Bonjour,

dans le cadre de mes cours je dois faire un exercice sur une classe IPv4.
j'ai recopié les trois fichiers mais je butte sur une erreur que je n'arrive pas à résoudre.
c'est un truc tout bête, j'en ai bien conscience, le résultat de gcc est à la fin, mais j'ai beau relire et comparer avec les cours et je ne vois pas ce que je peux faire.

IPv4.h

#ifndef _IPV4_H
#define _IPV4_H

class IPv4 {

    unsigned char * adresse ;
    unsigned char * masque ;

    void CalculerMasque( unsigned char _cidr ) ;

public :
    IPv4( const unsigned char * _adresse , const unsigned char _cidr ) ;
    IPv4( const unsigned char * _adresse , const unsigned char * _masque ) ;
    ~IPv4() ;

    void ObtenirMasque(unsigned char * _masque) ;
    void ObtenirAdresseReseau(unsigned char * _reseau) ;
    void ObtenirAdresseDiffusion(unsigned char * _diffusion) ;
};

#endif

IPv4.cpp

#include "IPv4.h"


IPv4::IPv4(const unsigned char * _adresse , const unsigned char _cidr)
{
    adresse = new unsigned char [4] ;
    masque = new unsigned char [4] ;

    for (int i = 0 ; i < 4 ; i++){
        adresse[i] = _adresse[i] ;
    }

    if (_cidr <= 32) {
        CalculerMasque(_cidr);
    }
}



IPv4::IPv4(const unsigned char * _adresse , const unsigned char * _masque)
{
    adresse = new unsigned char [4] ;
    masque = new unsigned char [4] ;

    for (int i = 0 ; i < 4 ; i++){
        adresse[i] = _adresse[i] ;
        masque[i] = _masque[i] ;
    }
}


IPv4::~IPv4()
{
    delete [] adresse ;
    delete [] masque ;

}


void IPv4::CalculerMasque(unsigned char _cidr)
{
    int i ;
    // le masque est remis à 0 -> 0.0.0.0
    for(i = 0 ; i<4 ; i++){
        masque[i] = 0 ;
    }

    i=0 ;
    // while cidr multiple de 8
    while(_cidr >= 8){
        masque[i++] = 255 ;
        _cidr -= 8 ;
    }

    // complément pour la fin du cidr
    unsigned char puissance = 128 ;

    while (_cidr-- > 0){
        masque[i] += puissance ;
        puissance /= 2 ;
    }
}


void ObtenirMasque(unsigned char * _masque)
{
    for (int i = 0 ; i<4 ; i++){
        _masque[i] = masque[i] ;
    }
}


void ObtenirAdresseReseau(unsigned char * _reseau)
{
    for (int i=0 ; i<4 ; i++){
        _reseau[i] = adresse[i] & masque[i] ;
    }
}



void ObtenirAdresseDiffusion(unsigned char * _diffusion)
{
    ObtenirAdresseReseau(adresseDuReseau) ;

    for (int i=0 ; i<4 ; i++){
        _diffusion[i] = adresseDuReseau[i] | ~masque[i] ;
    }
}

main.cpp

#include <iostream>
#include "IPv4.cpp"

void AfficherTableau(const unsigned char * array);


int main()
{

    unsigned char adresse[4] = {192,168,1,1} ;
    unsigned char masque[4] , reseau[4] , diffusion[4] ;

    IPv4 adresse1(adresse , 24);

    std::cout << "adresse IPv4 : " << std::endl ;

    AfficherTableau(adresse) ;
    adresse1.ObtenirMasque(masque) ;

    std::cout << " masque : " << std::endl ;

    AfficherTableau(masque) ;
    adresse1.ObtenirAdresseReseau(reseau) ;

    std::cout << " reseau : " << std::endl ;

    AfficherTableau(reseau) ;
    adresse1.ObtenirAdresseDiffusion(diffusion) ;

    std::cout << " diffusion : " << std::endl ;

    return 0 ;
}



void AfficherTableau(const unsigned char * array)
{
    for (int i=0 ; i<4 ; i++){
        std::cout << static_cast<int>(array[i]) ;

        if (i<3){
            std::cout << "." ;
        }
        std::cout << std::endl ;
    }
}

$ g++ -g main.cpp

In file included from main.cpp:2:
IPv4.cpp: In function ‘void ObtenirMasque(unsigned char*)’:
IPv4.cpp:68:22: error: ‘masque’ was not declared in this scope; did you mean ‘_masque’?
   68 |         _masque[i] = masque[i] ;
      |                      ^~~~~~
      |                      _masque
IPv4.cpp: In function ‘void ObtenirAdresseReseau(unsigned char*)’:
IPv4.cpp:76:22: error: ‘adresse’ was not declared in this scope
   76 |         _reseau[i] = adresse[i] & masque[i] ;
      |                      ^~~~~~~
IPv4.cpp:76:35: error: ‘masque’ was not declared in this scope
   76 |         _reseau[i] = adresse[i] & masque[i] ;
      |                                   ^~~~~~
IPv4.cpp: In function ‘void ObtenirAdresseDiffusion(unsigned char*)’:
IPv4.cpp:84:26: error: ‘adresseDuReseau’ was not declared in this scope
   84 |     ObtenirAdresseReseau(adresseDuReseau) ;
      |                          ^~~~~~~~~~~~~~~
IPv4.cpp:87:47: error: ‘masque’ was not declared in this scope
   87 |         _diffusion[i] = adresseDuReseau[i] | ~masque[i] ;
      |                                               ^~~~~~

est-ce que quelqu'un pourrait m'aider s'il vous plaît !

Dernière modification par Astrolivier (Le 14/11/2022, à 20:27)


S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)

Hors ligne

#2 Le 14/11/2022, à 20:05

NicoApi73

Re : [résolu]C++ variable de classe not declared in this scope

Bonjour,

Regarde ton entête, tu ne fais pas référence à la méthode de ta classe, mais à une fonction quelconque. Tu as le même problème pour :
ObtenirMasque
ObtenirMasque
ObtenirAdresseDiffusion

Tu l'as bien fait pour CalculerMasque, les constructeurs et le destructeur

Hors ligne

#3 Le 14/11/2022, à 20:27

Astrolivier

Re : [résolu]C++ variable de classe not declared in this scope

ahhhhh

trop cool merci beaucoup !
j'ai pas fait exprès mais c'était une question que je me suis déjà demandé, est ce obligé de mettre le "IPv4::", les histoires de namespace et tout.
j'ai encore du boulot !


S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)

Hors ligne