Bonjour à tous, je désire implementer une classe de chaine de carcatères caractères.Chaque objet de cette classe est donc une chaine de carctères Avec cette classe, l’utilisateur doit être capable de :
de créer une chaîne de plusieurs manières différentes prévoir des constructeurs necessaires et le constructeur par copie
Voici mon code, il comporte 6 erreurrs dans le main au niveau du 2 eme switch dans le main, mais je n'arive pas à me corriger.
Merci d'avance
Coold

fichier.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
#ifndef CCAHINE_H
#define CCHAINE_H
 
class CChaine
{
public:
	CChaine(void);
	CChaine(char * psChaine);//constructeur avec 1 paramètres
	CChaine::CChaine (const CChaine &);//constructeur par copie
	void Affiche(void);//fonction d'affichage de la chiane de caractères
	~CChaine(void);//destructeur de la classe
 
private:
	// longueur de la chaine de caractere
	int m_dLong;
	//pointeur de la chaine de caractère
	char *m_psTab;
 
public:
 
 
};
#endif
fichier.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
#include "CChaine.h"
#include<iostream>
#include<assert.h>
#include<string.h>
 
// constructeur par defaut
CChaine::CChaine(void)
: m_dLong(0)
, m_psTab(NULL)
{
}
 
//***********************
//constructeur par copie
//***********************
CChaine::CChaine (const CChaine &oCh)
: m_dLong(0)
{
	m_dLong = oCh. m_dLong;
	m_psTab = new char [m_dLong + 1];
	assert (m_psTab != 0);
	strcpy (m_psTab , oCh.m_psTab);
}
 
//*****************************
//constructeur avec 2 paramètres
//*****************************
CChaine::CChaine(char * psChaine)
:m_dLong(0)
{
	m_dLong = strlen(psChaine);
	m_psTab = new char [m_dLong + 1];
	assert (m_psTab != 0);
	strcpy(m_psTab , psChaine);
}
 
CChaine::~CChaine(void)
{
	delete[] m_psTab;
}
 
//*************************************************
// fonxtion d'affichage de la chiane de caractères
//*************************************************
void CChaine::Affiche(void)
{
	for(int dI = 0; dI < m_dLong; dI++)
		std::cout << m_psTab[dI];
}
et le fichier main.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
 
#include"CChaine.h"
#include <stdexcept>
#include <limits> //pour std::limits
#include<iostream>
 
//**********************************************************************************
//Implémenter une classe CChaine. Chaque objet de cette classe représente
//une chaîne de caractères. Avec cette classe, l’utilisateur doit être capable de :
 
//•	De créer une chaîne de plusieurs manières différentes 
//    --> quels constructeurs faut-il prévoir ?
//•	Définition du constructeur par copie
//***********************************************************************************
 
int Menu()
{
 
    int dChoix = 0;
    std::cout << "Veuillez choisir l'action suivante :" << std::endl;
	//-------------------------------------------------------------------
	// si l'utilisateur ne fait pas le bon choix, on lui affiche le menu
	// et lecture de son choix 
	//	Tant qu'input n'est pas 1 chiffre => ignoré
	//	Traitement du cas où le choix ,'est pas dans l'intervalle 
	//retour du choix
	//------------------------------------------------------------------
 
    while(dChoix < 1 || dChoix > 3)
    {
        std::cout << "1 - creer une nouvelle chaine " << std::endl
                  << "2 - afficher la chaine " << std::endl
                  << "3 - quitter" << std::endl;
		std::cout << "\nVotre choix ? ";
        while(!(std::cin >> dChoix))
        {
            std::cout << "veuillez introduire des chiffres uniquement..." << std::endl
                      << "Votre choix ?";
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
        if(dChoix < 1 || dChoix > 3)
            std::cout << "veuillez choisir une valeur entre 1 et 3" << std::endl;
    }
    return dChoix;
}
 
int MenuCreation()
{
	int dChoixCr;
	std::cout << "10 - creer une nouvele chaine avec le c'tor avec 1 parametre  " << std::endl 
		      << "11 - creer une nouvele chaine avec le c'tor par copie" << std::endl
		      << "12 - quitter" << std::endl;
	std::cout << "\nVotre choix ? ";
	while(!(std::cin >> dChoixCr))
	{
		std::cout << "veuillez introduire des chiffres uniquement..."<<std::endl
                  << "Votre choix ?";
		std::cin.clear();
		std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
	}
	if(dChoixCr < 10 || dChoixCr > 12)
		std::cout << "veuillez choisir une valeur entre 10 et 12" << std::endl;
	return dChoixCr;
}
 
 
int main()
{
    int dLong;
	int dChoix = 0;
	std::cout << "PRJ03 Classe CChaine\n\n" 
		<< "Application permettant la gestion de chaines de caracteres" 
		<< std::endl;
 
    std::cout << "Que voulez-vous faire ?";
	dChoix = Menu();
 
	try
    {
        CChaine oChaine;
        int dChoix = 0;
        while(dChoix != 3)
        {
            dChoix = Menu(); // on demande le choix de l'utilisateur 
            switch(dChoix)
            {
            case 1: 
				int dCh_Create = 0;
				char sTabMsg;
				while(dCh_Create != 12)
				{
					dCh_Create = MenuCreation();
					switch(dCh_Create)
					{
					case 10:
						//std::cout << "entrer la chaine " ;
						//std::cin >> sTabMsg;
						oChaine("sTabMsg");
						break;
 
					case 11:
						std::cout << " Entrer la chaine " ;
						std::cin >> sTabMsg;
						oChaine(sTabMsg);
						oChaine2(oChaine);
						break;
 
					case 12:             
						break;
 
					default:
						break;
					}
				}
 
			case 2:oChaine.Affiche();
				break;
 
			case 3:
 
			default:
				break;
            }
        }
    }
    catch(std::bad_alloc &e)
    {
        std::cout << "une erreur est survenue lors de l'initialisation " << std::endl
                  << "il m'est impossible de continuer"<<std::endl;
        return 1;//on n'a pas pu travailler correctement
    }
    return 0;
}