[C++] Constructeurs et données membres
Résolu
KX
Messages postés
16761
Date d'inscription
Statut
Modérateur
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'essaye d'utiliser une librairie (que je ne peux pas modifier).
Elle contient en particulier deux classes qui n'ont pas de constructeur par défaut.
Or j'ai besoin d'initialiser des données membres dans mon constructeur, et je n'y arrive pas !
Ceci fonctionnerait dans un autre contexte :
Ce que j'ai essayé pour mon constructeur :
Je remercie d'avance chacune de vos propositions...
Informations supplémentaires :
Erreurs à la compilation (Visual Studio 2008) :
Prototypes des opérations concernés :
J'essaye d'utiliser une librairie (que je ne peux pas modifier).
Elle contient en particulier deux classes qui n'ont pas de constructeur par défaut.
Or j'ai besoin d'initialiser des données membres dans mon constructeur, et je n'y arrive pas !
Ceci fonctionnerait dans un autre contexte :
XLSFile xf(nomFichier); XLSSheet xs = xf.newSheet("stats");
Ce que j'ai essayé pour mon constructeur :
class fichierExcel { private: XLSFile xf; XLSSheet xs; public: fichierExcel(const std::string &nomFichier) { XLSFile x(nomFichier); xf = x; xs = xf.newSheet("stats"); } };
Je remercie d'avance chacune de vos propositions...
Informations supplémentaires :
Erreurs à la compilation (Visual Studio 2008) :
error C2512: 'XLSSheet' : aucun constructeur par défaut approprié disponible error C2512: 'xlsFile::XLSFile' : aucun constructeur par défaut approprié disponible
Prototypes des opérations concernés :
XLSFile(const std::string &chem, xlsFile::use_option m = CREATE) XLSSheet(const std::string &nom, xlslib_core::workbook &w) XLSSheet(xlslib_core::worksheet *wsh) XLSSheet xlsFile::XLSFile::newSheet(const std::string &name = "sheet")
A voir également:
- [C++] Constructeurs et données membres
- Fuite données maif - Guide
- Supprimer les données de navigation - Guide
- Trier des données excel - Guide
- Difference entre mode avion et donnees mobiles - Guide
- Sauvegarde des données - Guide
3 réponses
Elle contient en particulier deux classes qui n'ont pas de constructeur par défaut
Si, il existe, si nécessité se fait sentir, toujours un constructeur par défaut, c'est-à-dire un constructeur qui n'accepte pas de paramètres. Dans le cas où aucun n'est défini par le programmeur, le compilateur en crée un.
Si tu veux absolument construire un objet et lui passer un nom de fichier, tu as 2 solutions:
- soit tu crées l'objet et ensuite tu appelles une fonction membre qui permet d'enregistrer ce nom de fichier,
-soit tu dérives ta classe et tu construis un objet en passant le nom du fichier; il te faut évidemment définir un constructeur qui accepte ce paramètre et qui appellera le constructeur et la fonction membre de la classe de base.
Bonne continuation.
Si, il existe, si nécessité se fait sentir, toujours un constructeur par défaut, c'est-à-dire un constructeur qui n'accepte pas de paramètres. Dans le cas où aucun n'est défini par le programmeur, le compilateur en crée un.
Si tu veux absolument construire un objet et lui passer un nom de fichier, tu as 2 solutions:
- soit tu crées l'objet et ensuite tu appelles une fonction membre qui permet d'enregistrer ce nom de fichier,
-soit tu dérives ta classe et tu construis un objet en passant le nom du fichier; il te faut évidemment définir un constructeur qui accepte ce paramètre et qui appellera le constructeur et la fonction membre de la classe de base.
Bonne continuation.
Salut !
Il existe peut-être effectivement des constructeurs par défaut, mais le compilateur me dit clairement qu'il ne peut pas les utiliser (aucun constructeur par défaut approprié disponible)
En fait le seul constructeur disponible (défini par le programmeur) prends en paramètre un nom de fichier - et éventuellement une option. Donc je n'ai pas besoin de dériver ma classe ou d'utiliser une fonction membre pour passer mon nom de fichier, cela se fait (et c'est obligatoire) dans la construction de l'objet. J'y arrive très bien avec des variables locales, mais pas avec mes données membres !
Il existe peut-être effectivement des constructeurs par défaut, mais le compilateur me dit clairement qu'il ne peut pas les utiliser (aucun constructeur par défaut approprié disponible)
En fait le seul constructeur disponible (défini par le programmeur) prends en paramètre un nom de fichier - et éventuellement une option. Donc je n'ai pas besoin de dériver ma classe ou d'utiliser une fonction membre pour passer mon nom de fichier, cela se fait (et c'est obligatoire) dans la construction de l'objet. J'y arrive très bien avec des variables locales, mais pas avec mes données membres !
Merci de vos réponses.
Voici un code simple qui génère mon problème :
Voici un code simple qui génère mon problème :
class tata { int a0,b0; public: tata(int a, int b) { a0=a; b0=b; } tata(int b) { a0=0; b0=b; } }; class titi { int c0,d0; public: titi(int c,int d=0) { c0=c; d0=d; } tata foo(int a) { tata t(a,5); return t; } }; class toto { tata ta; titi ti; public: toto(int c) // error C2512: 'titi' et 'tata' { // aucun constructeur par défaut approprié disponible titi t(c); ti = t; ta = t.foo(34); } }; int main() { titi ti(12); tata ta=ti.foo(23); toto to(5); return 0; }
fichierExcel n'est pas une fonction mais le constructeur de ma classe, et ce ne sont donc pas des variables dont j'ai besoin, mais des données membres, et c'est bien le problème...
et tu les instancies (new) dans ton constructeur;
XLSFile xf(CString("defaut.xls"));