Const et struct ?

Hello

Je voudrai me faire une list donc via une structure:

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

#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 ?

#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:

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

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 ?

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 {}. :wink:

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, …

Merci pour vos réponse, sa va m’aider :smt006