IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Problème d'affectation entre les valeurs de deux fonctions


Sujet :

Langage C++

  1. #1
    Membre du Club Avatar de Gobelins
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 60
    Points
    60
    Par défaut Problème d'affectation entre les valeurs de deux fonctions
    J'ai une erreur de compilation d'affectation d'adresse je pense du genre:

    lvalue required as left operand of assignment, à la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat->hauteur(i,j) = resultat->Hauteur_Terrain(image,i,j, PTS_MAX, PTS_MAX);
    Voici le code
    Dans le fichier Terrain.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    double Terrain::Hauteur_Terrain(SDL_Surface *image, int i, int j, int maxi, int maxj)
     
    {
    .....
    .....
    }
     
    Terrain* Init_Terrain()
    {
    ....
    ...
    Terrain* resultat;
    int i,j;
     
    /* On charge laa heightmap */
     
    image = SDL_LoadBMP("data/heightmap.bmp");
     
     
     
    if(image==NULL)
     
    return NULL;
     
     
     
    resultat = new Terrain;
     
     
     
    if(resultat==NULL)
     
    {
     
    printf("Malloc du terrain a echoue\n");
     
    return NULL;
     
    }
     
     
     
     
    for(i=0;i<PTS_MAX;i++)
     
    {
     
    for(j=0;j<PTS_MAX;j++)
     
    {
     
    resultat->hauteur(i,j) = resultat->Hauteur_Terrain(image,i,j, PTS_MAX, PTS_MAX);
     
    }
     
    }
    .....
    }
    Dans le fichier Terrain.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //nombre maximum de points dans le terrain
     
    #define PTS_MAX 32
     
     
    class Terrain
     
    {
     
    public:
     
    Terrain();
     
    ~Terrain();
     
     
     
    double Hauteur_Terrain(SDL_Surface *image,int i,int j, int x, int y);
    ......
    .....
    double hauteur(int i,int j);
    ...
    };
    Voilà, Pourriez-vous m'aider à corriger l'erreur, car j'ai essayé de la corriger, mais l'erreur persite toujours.

  2. #2
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Le compilo est clair pourtant :
    te retourne une rvalue. Or une rvalue ne peux pas être à gauche d'une assignation
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #3
    Membre du Club Avatar de Gobelins
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 60
    Points
    60
    Par défaut
    pour moi, ce n'est pas clair, explique-moi pour que je puisse corriger l'erreur de compilation. Comment rectifier l'affectation des valeurs entre les deux fonctions?

  4. #4
    Membre du Club Avatar de Gobelins
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 60
    Points
    60
    Par défaut
    J'ai réécris d'une autre façon la hauteur qui était une fonction et je l'ai remplacée par un tableau à deux dimensions.

    double hauteur(int i,int j); devient double hauteur[i] [j];

    Les points sont calculés et stockés dans un tableau à 2 dimensions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    printf("Getting points\n");
    	for(i=0;i<POINTS_MAX;i++)
    
    	{
    
    		for(j=0;j<POINTS_MAX;j++)
    
    		{
    
    			resultat->hauteur[i][j] = resultat->Hauteur_Terrain(image,i,j, POINTS_MAX, POINTS_MAX);
    
    
    		}
    
    	}
    
    // Cette fonction pose les arbres sur le terrain
    
    int Arbress::definir_position(Terrain *terrain)
    {
    
      int oui=0;
    
    
      //Obtention dimensions
      //************************//
      float max_x = terrain->get_size_x();
      float max_y = terrain->get_size_y();
    
    
     SDL_Surface *image;
    
      //fixer les panneaux
    
      //placer l'arbre 1
      //************************//
      int k_panneau=0;
      for(k_panneau=0;k_panneau<N[0];k_panneau++)
        {
          position[3*k_panneau+0] = (float)(rand()%PRECISION_RAND)/(PRECISION_RAND)*max_x;
          position[3*k_panneau+2] = (float)(rand()%PRECISION_RAND)/(PRECISION_RAND)*max_y;
          position[3*k_panneau+1] = terrain->Hauteur_Terrain(image,position[3*k_panneau+0],position[3*k_panneau+2],POINTS_MAX,POINTS_MAX);
    La compilation fonctionne, pas d'erreur, mais j'ai une Erreur de segmentation lors de l'exécution. Comment résoudre cet erreur? Je ne vois pas comment m'y prendre. Merci de votre aide

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 168
    Points
    168
    Par défaut
    Utilises tu std::vector pour tes tableaux ?
    Si non : comment alloues tu resultat->hauteur, et position ?
    T'es tu assurée que les indices utilisés ne dépassent pas la taille des tableaux ?
    --
    Jérémie
    Jérémie

  6. #6
    Membre du Club Avatar de Gobelins
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 60
    Points
    60
    Par défaut Balises code ajoutées, merci d'y penser à l'avenir
    C'est de cette façon que j'alloue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    /* Initialiser le terrain */
     
    Terrain* Init_Terrain()
    {
     
    	    SDL_Surface    *image,
     
    		    *terrain_txtr,
    		    *neige;
     
     
    	int i,j,tmpi,tmpj;
     
    	double r,g,b;
     
    	Terrain* resultat;
     
    	float perc[3];
     
     
            /* On charge le heightmap */
     
    	image = SDL_LoadBMP("Data/heightmap.bmp");
     
     
    	if(image==NULL)
     
    		return NULL;
     
    	resultat = new Terrain;
          ....
          ....
     
    }
    Pour la position

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /****************************************************/
    int Transparent_elements::load_transparent_file()
    {
      int ok=0;
     
      int N_0=0,N_1=0,N_2=0,N_3=0;
     
     
      ok += get_size_element(SAVE_TREE_1_PATH,&N_0);
      ok += get_size_element(SAVE_TREE_2_PATH,&N_1);
     
     
      N_total=N_0+N_1+N_2+N_3;
     
     
      //allocation:
      position = new float[3*N_total];
     
    }
    C'est de cette façon que j'alloue resultat et position. Je n'alloue pas resultat->hauteur

Discussions similaires

  1. Réponses: 15
    Dernier message: 13/02/2015, 16h24
  2. Réponses: 3
    Dernier message: 20/10/2014, 11h58
  3. Réponses: 4
    Dernier message: 22/08/2014, 14h43
  4. Recuperer et agreger les valeurs de deux champs
    Par Dhumkazaar dans le forum Access
    Réponses: 2
    Dernier message: 11/05/2006, 11h34
  5. Réponses: 3
    Dernier message: 04/04/2006, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo