PDA

Afficher la version complète : [Non Réglé] Projet C++ Kdevelop



Sirius
13/05/2005, 17h28
Salux !

Je me suis récemment remis au C++, et je souhaite utiliser Kdevelop de KDE 3.4 pour mes projets...

Pour mon petit projet je voudrais créer une classe pour me permettre de gérer mon serveur FTP. Mais comme je débute, je coince au niveau de la déclaration de la class...

Mon problème est simple : je veux mettre la class "Ftpd" et la fonction "main" dans deux fichiers cpp différents, puis les intégrés à un projet Kdevleopp...

Les deux fichiers sont dans le projet, mais à la compilation j'ai : <div class='quotetop'>Citation </div>
/home/pierre-do/Documents/C++/gestionftp/src/gestionftp.cpp:38: error: invalid use of undefined type `struct Ftpd'
/home/pierre-do/Documents/C++/gestionftp/src/gestionftp.cpp:32: error: forward declaration of `struct Ftpd'
/home/pierre-do/Documents/C++/gestionftp/src/gestionftp.cpp:39: error: `start' undeclared (first use this function)
/home/pierre-do/Documents/C++/gestionftp/src/gestionftp.cpp:39: error: (Each undeclared identifier is reported only once for each function it appears in.)[/b]

Que faire ?

Le contenu des mes deux fichiers :

gestionftpd.cpp
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream>
#include <cstdlib>

using namespace std;

class Ftpd;

int main(int argc, char *argv[])
{
cout << "Bienvenue...\n" << endl;

Ftpd *pFtpd = new Ftpd;
pFtpd->start();

return EXIT_SUCCESS;
}

et ftpdGestion.cpp :
#include <iostream>
#include <cstdlib>

using namespace std;

class Ftpd
{
//Les Path de configuration
public :
char pureFtpd[128+1];

//Les variables
public:
int etat;

//Les fonctions membres
public:
void start();


};

void Ftpd::start()
{
cout << "test\n";
}

Qu'ai-je fait faux ?

Merci d'avance http://www.alionet.org/style_emoticons/<#EMO_DIR#>/biggrin.gif

Sirius

molodoi
14/05/2005, 12h04
chacun programme un peu comme il veut...

Perso, en C++, j'associe à chaque fichier .cpp un fichier .h qui contiendra les signatures des méthodes ainsique les déclarations de classe.

Dans ton cas, ça donnera:

ftpd.h

#ifndef _FTPD_H
#define _FTPD_H
#include <iostream>
#include <cstdlib>

using namespace std;

class Ftpd{
//Les Path de configuration
public :
char pureFtpd[128+1];
int etat;
void start();
};
#endif //_FTPD_H

Note: Merci de mettre les attributs (pureFtpd et etat) en private et d'écrire des accesseurs http://www.alionet.org/style_emoticons/<#EMO_DIR#>/diablo.gif

ftpd.cpp

#include "ftpd.h"

void Ftpd::start(){
cout << "a poil!" << endl;
}//end start()


gestionftpd.cpp:

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream>
#include <cstdlib>

#include "ftpd.h"

using namespace std;

int main(int argc, char *argv[]){
cout << "Bienvenue...\n" << endl;

Ftpd *pFtpd = new Ftpd;
pFtpd->start();

return EXIT_SUCCESS;
}//end main

Bon, en clair, tes problèmes sont liés à des 'non-déclarations' de prototype.

La façon la plus propre de procéder est, à mon sens, de faire comme je l'ai indiqué, à savoir créer des fichiers d'en-têtes (les .h) et de les inclure là où c'est nécessaire.

Sirius
15/05/2005, 17h45
Merci Molodoi, je vais voir !

Ca fait plaisir de voir qu'il y a des programmeurs dans l'équipe :-D Ce forum est plein de ressources http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wink.gif