Bonjour, je me joint à votre communauté car je débute un projet C++. Jusque là je me débrouillais avec les exemples de code déjà fais par mes collègues mais là je bloque sur un truc tout bête je pense, l'appel d'une fonction qui est dans une autre class. Je met le code
ReadMATFID.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
24
25
26
27
28
29
30
31
32
33
34
35
class CReadMATFID
{
	public:
		/*------------------------------------------------------------------------------*/
		/* Constructeur																	*/
		/*------------------------------------------------------------------------------*/
 
		CReadMATFID(int Size, char *PathFile, CLogHandler *pLog);
 
		/*------------------------------------------------------------------------------*/
		/* Destructeur																	*/
		/*------------------------------------------------------------------------------*/
		~CReadMATFID();
 
		/* Lecture + mise en mémoire de la matrice */
		void ReadMat();
 
		int **GetMatFID (){return ArrayTable;}
 
	private:
 
		// Matrice	
		int **ArrayTable;
 
		// Nombre d'éléments du tableau
		int nTable;
 
		//chemin vers le fichier
		char pPathFile[MAX_PATH+1];
 
		//pointeur vers classe pour les log d'erreur
		CLogHandler *pcLog;
		//
		int RetFileLength(FILE *pFile);
};
ReadMATFID.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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*-----------------------------------------------------------------------*/
/* Constructeur de la classe                                             */
/* Données d'entrée:													 */
/* CWnd* pParentWnd: fenêtre parent                                      */
/*-----------------------------------------------------------------------*/
CReadMATFID::CReadMATFID(int Size, char *PathFile, CLogHandler *pLog)
{
 
	nTable=Size;
	if (PathFile!=NULL)
		strcpy(pPathFile, PathFile);
	if (pLog !=NULL)
		pcLog = pLog;
	if (nTable>0)
	{
		ArrayTable  = new int*[nTable+1];
		for (int k=0;k<nTable+1;k++)
			ArrayTable[k] = new int[nTable+1];
	}
}
 
/*-----------------------------------------------------------------------*/
/* Destructeur de la classe                                              */
/*-----------------------------------------------------------------------*/
CReadMATFID::~CReadMATFID()
{
	int i;
	//destruction char **ArrayTable
	if(nTable)
	{
		for(i=0;i<nTable;i++)
			delete /*[]*/ ArrayTable[i];
		delete ArrayTable;
	}
}
 
/*------------------------------------------------------------------------*/
/* Lecture + mise en mémoire de la matrice                                */
/*------------------------------------------------------------------------*/
void CReadMATFID::ReadMat()
{
	BOOL bexport = TRUE;
	int  i = 0, m = 1, n = 1, FileSize = 0;
	char *file;
	char *pTk;
	char *pValue;
	char errorTxt[512];
	FILE *hFile;
 
 
	//clear mémoire tableau
	memset(*ArrayTable, 0, sizeof(ArrayTable));
 
	// ouverture du fichier en lecture seul
	//sprintf(pathFile, ".\\MATFID.csv");
	if(hFile = fopen(pPathFile, "rb"))
	{
		// taille du fichier
		FileSize = RetFileLength(hFile) - 1;
		if(FileSize > 0)
		{
			// recup du contenu du fichier
			file = new char[FileSize + 1];
			file[0]='\0';
			if(fread(file,1,FileSize,hFile))
			{
				if(file[0] != '\0')
				{
					// séparation des reqêtes
					file[FileSize]='\0';
					pTk = strtok (file,"\n");
					while (pTk != NULL && bexport)
					{
						int ilenLine = strlen(pTk);
						int iOldPos = 0;
						// parcourir la chaine de caractères d'une ligne
						for (int iPos=0; iPos<=ilenLine; iPos++)
						{
							// lorsque l'on trouve un ";"
							if (pTk[iPos] == ';' && iPos>=iOldPos )
							{
								pValue = new char[iPos-iOldPos + 1];
								pValue[0]='\0';
								//copie de valeur entre la position du précédent ";" et la position actuelle
								strncpy(pValue, pTk+iOldPos, iPos-iOldPos);
								// conversion en int
								if (pValue !=NULL) // test si pValue = NULL la fonction atoi() plante!!!
									ArrayTable[m][n]= atoi(pValue);
								else
								{
									sprintf(errorTxt, "pValue = NULL x=%d; y =%d", m, n);
									if (pcLog !=NULL)
										pcLog->LogError("CMatFile::ChargedMat", errorTxt);
								}
								n++;
								iOldPos = iPos+1;
								if (pValue !=NULL)
									delete pValue;
							}
							// lorsque l'on arrive sur le dernier caractère
							if (iPos==ilenLine && iPos>=iOldPos )
							{
								pValue = new char[iPos-iOldPos + 1];
								pValue[0]='\0';
								//copie de valeur entre la position du précédent ";" et la position actuelle
								strncpy(pValue, pTk+iOldPos, iPos-iOldPos);
								// conversion en int
								if (pValue !=NULL) // test si pValue = NULL la fonction atoi() plante!!!
									ArrayTable[m][n]= atoi(pValue);
								else
								{
									sprintf(errorTxt, "pValue = NULL x=%d; y =%d", m, n);
									if (pcLog !=NULL)
										pcLog->LogError("CMatFile::ChargedMat", errorTxt);
								}
								if (pValue !=NULL)
									delete pValue;
							}
						}
						n=1;
						m++;
						pTk = strtok (NULL,"\n");
					}
				}
				else
				{
					sprintf(errorTxt, "Problème de remplissage du buffer, fichier de sauvegarde '%s' (longueur:%d)", pPathFile, FileSize);
					if (pcLog !=NULL)
						pcLog->LogError("CMatFile::ChargedMat", errorTxt);
				}
			}
			else
			{
				sprintf(errorTxt, "Problème de lecture dans le fichier de sauvegarde '%s' (longueur:%d)", pPathFile, FileSize);
				if (pcLog !=NULL)
					pcLog->LogError("CMatFile::ChargedMat", errorTxt);
			}
			if (file !=NULL)
				delete file;
		}
		fclose(hFile);
	}
	else
	{
		sprintf(errorTxt, "Problème d'ouverture du fichier de sauvegarde '%s' en lecture", pPathFile);
		if (pcLog !=NULL)
			pcLog->LogError("CDBFile::ImportNPP", errorTxt);
	}
}
La class où je veux appeler celle ci dessus
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
#include "ReadMATFID.h" //matrice TFID

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// boîte de dialogue CPastisPcDlg

CPastisPcDlg::CPastisPcDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPastisPcDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	if (pcLogHandler == NULL)
		pcLogHandler = new CLogHandler(TEXT(".\\"));
	pcMatFID = new CReadMATFID (1756, ".\\MATFID.csv", pcLogHandler);
}

/*-----------------------------------------------------------------------*/
/* Destructeur de la classe                                              */
/*-----------------------------------------------------------------------*/
CPastisPcDlg::~CPastisPcDlg()
{
	if (pcMatFID !=NULL)
	{
		delete pcMatFID;
		pcMatFID = NULL;
	}
	if (pcLogHandler!=NULL)
	{
		delete pcLogHandler;
		pcLogHandler = NULL;
	}
	
}

BEGIN_MESSAGE_MAP(CPastisPcDlg, CDialog)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(ID_EXEC, TestReadFile)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


void CPastisPcDlg::TestReadFile()
{
	ICI JE VEUX APPELER ReadMat() de CReadMATFID.

}
Merci d'avance