# Const et struct ?

**URL:** <https://www.debian-fr.org/t/const-et-struct/24850>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 9:32 UTC](https://www.debian-fr.org/t/const-et-struct/24850 "2016-02-20T21:32:00Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 20, 2016, 9:32 UTC](https://www.debian-fr.org/t/const-et-struct/24850/1 "2016-02-20T21:32:00Z")

</div>

Hello

Je voudrai me faire une list donc via une structure:

(je compile donc séparément)  
fichier \*.h

```auto
#ifndef DEF_ME_STRUC_IPTABLES
#define DEF_ME_STRUC_IPTABLES

struct s_iptables
{
	s_iptables() 
	{
		Test = 200;
	}
	int Test;
};

#endif //fin des macro

```

seulement comment empêcher le changement des valeur ?

```auto
#ifndef DEF_ME_STRUC_IPTABLES
#define DEF_ME_STRUC_IPTABLES

struct s_iptables
{
	s_iptables() 
	{
		Test = 200;
	}
	const int Test;
};

#endif //fin des macro
```

l’erreur renvoiyée:

```auto
struc_iptables.h: In constructor ‘s_iptables::s_iptables()’:
struc_iptables.h:6: error: uninitialized member ‘s_iptables::Test’ with ‘const’ type ‘const int’
struc_iptables.h:8: error: assignment of read-only data-member ‘s_iptables::Test
```

sinon je pourrait l’inserer dans une classe avec une methode qui renvoiye la structure. seulment pas moyen sa veux pas

```auto
fichier .h
class c_conf
{
	public:
		c_conf();
        private:
		struct *initialise(); //bug?
}
fichier .cpp
struct * c_conf::initialise()
{
	struct s_mystruc
	{
		s_mystruc() 
		{
			Test = 200;
		}
		int Test;
	};
	return s_mystruc;
}

int main()
{
    c_conf c_c;
    int b=0;
    s_mystruc* v=new c_c.initialise();
    std::cout << b << std::endl;
}
```

une idée ?

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:32 UTC](https://www.debian-fr.org/t/const-et-struct/24850/2 "2016-02-20T21:32:02Z")

</div>

Toute la subtilité du C++.

Dans ton constructeur, quand tu entre dans le bloc “{ }” ton objet est déjà construit, toutes les données membre ont déjà étaient initialisées avec leur valeur par défaut s’il s’agit de type et leur constructeurs par défaut sinon.

Donc pour que ta valeur soit affectée au bon moment :

`struct s_iptables
{
   s_iptables() 
       :Test(200)
   {
   }
   const int Test;
};`  
tu utilise le pseudo constructeur avant d’entrer dans le bloc {}. 😉

---

<div class="post-metadata">

**Author:** ![Davidbrcz](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/8c91f0/32.png) [@Davidbrcz](https://www.debian-fr.org/u/Davidbrcz)\
**Post date:** [Février 20, 2016, 9:32 UTC](https://www.debian-fr.org/t/const-et-struct/24850/3 "2016-02-20T21:32:05Z")

</div>

> [@](#):
>
> tu utilise le pseudo constructeur avant d’entrer dans le bloc {}

Ca s’appelle la liste d’initialisation et ca permet :

1. D’appeler les constructeurs des classes parentes
2. De d’initialiser les variables membres non héritées.

C’est indispensable dans le cas des membre constant, des références, …

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 20, 2016, 9:32 UTC](https://www.debian-fr.org/t/const-et-struct/24850/4 "2016-02-20T21:32:16Z")

</div>

Merci pour vos réponse, sa va m’aider ![:smt006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif)
