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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2020
    Messages : 4
    Par défaut "une référence de membre non statique doit être relative à un objet spécifique" variable dans une structure
    Bonjour,

    je débute actuellement en c++, j'ai un problème dont je n'arrive pas à résoudre, voici le code :

    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
    struct Matrix
    {
    	int region = 0;
     
    	struct limit
    	{
    		void display()
    		{
    			std::cout << region << std::endl;
    		}
     
    	}limit;
     
    }matrix[4][20];
     
    int main()
    {
    	matrix[0][1].region = 90;
     
    	std::cout << matrix[0][0].region << std::endl;
    	std::cout << matrix[0][1].region << std::endl;
     
     
    	system("pause");
    	return 0;
    }
    impossible de lire la variable region, ils me disent "une référence de membre non statique doit être relative à un objet spécifique", mais lorsque je la met en static, j'obtient la même valeur avec matrix[0][0].region et matrix[0][1].region :

    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
    struct Matrix
    {
    	static int region;
     
    	struct limit
    	{
    		void display()
    		{
    			std::cout << region << std::endl;
    		}
     
    	}limit;
     
    }matrix[4][20];
     
    int Matrix::region;
     
    int main()
    {
    	matrix[0][1].region = 90;
     
    	std::cout << matrix[0][0].region << std::endl;
    	std::cout << matrix[0][1].region << std::endl;
     
     
    	system("pause");
    	return 0;
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Quel problème essayes-tu de résoudre ?
    Ce code est incorrect. Et illogique.
    region est un membre de Matrix, pas de limit, alors limit y a bien sûr pas accès.
    Et puis les syntaxes sont vraiment étranges. Matrix est une structure, mais tu crées ensuite un tableau bidimensionnel de Matrix. Pour en faire une matrice je suppose ? Tu as donc une matrice de Matrix... c'est concept.

    mais lorsque je la met en static, j'obtient la même valeur avec matrix[0][0].region et matrix[0][1].region
    Euh oui.. c'est le principe du mot-clé static dans une variable de class/struct.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2020
    Messages : 4
    Par défaut
    Je vais refaire un autre exemple, car j'essaie de développer un petit jeu de plateau avec des cases, c'est un peu galère à comprendre avec l'ancien code x), voici un autre code :

    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
    struct A
    {
    	int x;
     
    	struct B
    	{
    		bool test()
    		{
    			return (x == 2);
    		}
    	}b;
    }a[4];
     
    int main()
    {
    	a[0].x = 0;
    	a[1].x = 1;
    	a[2].x = 2;
    	a[3].x = 3;
     
    	if (a[0].b.test())
    		std::cout << "x == 2" << std::endl;
    	else
    		std::cout << "x != 2" << std::endl;
     
    	system("pause");
    	return 0;
    }
    C'est pour savoir si c'était possible que la structure B puisse lire la variable x dans la structure A (si c'est possible), vu que la structure B se situe dans la structure A ? voilà voilà ^^

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Tu essaies des choses bizarres, tu devrais peut-être commencer par bien apprendre la syntaxe de base.
    Et non, un type interne n'aucun accès particulier à sa classe englobante (en Java c'est différent).
    En gros une classe interne c'est fait pour l'encapsulation, ça sert à créer de choses internes qui ne concernent pas les autres. Par exemple si tu définis un type dans un fichier source, les autres fichiers ne sauront même pas qu'il existe, c'est local. Si tu définis un type dans une classe. S'il est private, c'est que seule la classe va s'en servir. S'il est public, c'est que seul ceux qui utilisent la classe englobante auront besoin de l'utiliser dans le cadre d'interactions avec cette classe englobante.
    En plus court, quand on débute on a rarement besoin d'utiliser des classes imbriquées.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2020
    Messages : 4
    Par défaut
    Bonjour,

    Merci pour toutes vos réponses rapides, j’avoue que j’essaie des choses assez étranges , je pensais qu’il existait un moyen de lire la variable x dans la structure B, mais tout compte fais c’est impossible. Grâce à vous, je ne vais plus rester bloqué sur ce problème ahaha.

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par Léo976 Voir le message
    je pensais qu’il existait un moyen de lire la variable x dans la structure B, mais tout compte fais c’est impossible
    Pas tant que cela

    Faire 1 structure/ classe imbriquée permet de faire 1 association forte entre 2 classes (c'est + pour la sémantique et l'organisation du code )

    Mais tu as la notion d'amitié avec le mot clef friend, qui permet à 1 structure/ classe d'accéder aux membres/ fonctions d'1 autre classe, même privé et protégé.
    friend declaration, documentation cppreference.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/11/2007, 13h14
  2. Réponses: 4
    Dernier message: 31/07/2007, 21h52
  3. [JSP/javascript] lire une variable dans un infobulle
    Par maniolo dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 20/10/2006, 14h50
  4. Réponses: 3
    Dernier message: 02/10/2006, 21h20
  5. lire une donnée dans une variable de session
    Par pblb62 dans le forum Langage
    Réponses: 8
    Dernier message: 21/03/2006, 14h23

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