Jai une classe Brick avec un contructeur: Brick(int width , int height)
cette classe n'a pas de constructeur par defaut.
Maintenant je declare dans une autre classe un pointeur comme ceci ;
Brick *bricks;
lorsque je veux initialiser avec bricks=new Brick[50];
j'ai une erreur de compilation :no appropriate default constructor
available.
Je ne comprends pas comment je pourrais initaliser un tableau d'objets qui
n'ont pas de contructeur par defaut.
Je suis programmeur java et il me suffit de faire
Brick[] bricks=new Brick[50];
puis si je veux initialiser un Brick je fais bricks[10]=new Brick(10,10);
Comment faire la même chose en c++
Merci d'avance.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Marc Boyer
Arman Ozcelik wrote:
Bonjour, J' ai un petit probleme d'initalization.
Jai une classe Brick avec un contructeur: Brick(int width , int height) cette classe n'a pas de constructeur par defaut.
Maintenant je declare dans une autre classe un pointeur comme ceci ;
Brick *bricks;
lorsque je veux initialiser avec bricks=new Brick[50]; j'ai une erreur de compilation :no appropriate default constructor available.
Je ne comprends pas comment je pourrais initaliser un tableau d'objets qui n'ont pas de contructeur par defaut. Je suis programmeur java et il me suffit de faire
Brick[] bricks=new Brick[50]; puis si je veux initialiser un Brick je fais bricks[10]=new Brick(10,10);
Parce que la declaration Java Brick [] foo; est grosso-modo equivalente en C++ a vector<Brick*> foo; ou, sans vector (mais on se demande pourquoi s'en passer, surtout dans ce cas), a Brick**
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
Arman Ozcelik wrote:
Bonjour,
J' ai un petit probleme d'initalization.
Jai une classe Brick avec un contructeur: Brick(int width , int height)
cette classe n'a pas de constructeur par defaut.
Maintenant je declare dans une autre classe un pointeur comme ceci ;
Brick *bricks;
lorsque je veux initialiser avec bricks=new Brick[50];
j'ai une erreur de compilation :no appropriate default constructor
available.
Je ne comprends pas comment je pourrais initaliser un tableau d'objets qui
n'ont pas de contructeur par defaut.
Je suis programmeur java et il me suffit de faire
Brick[] bricks=new Brick[50];
puis si je veux initialiser un Brick je fais bricks[10]=new Brick(10,10);
Parce que la declaration Java
Brick [] foo;
est grosso-modo equivalente en C++ a
vector<Brick*> foo;
ou, sans vector (mais on se demande pourquoi s'en passer, surtout dans
ce cas), a
Brick**
Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(
Jai une classe Brick avec un contructeur: Brick(int width , int height) cette classe n'a pas de constructeur par defaut.
Maintenant je declare dans une autre classe un pointeur comme ceci ;
Brick *bricks;
lorsque je veux initialiser avec bricks=new Brick[50]; j'ai une erreur de compilation :no appropriate default constructor available.
Je ne comprends pas comment je pourrais initaliser un tableau d'objets qui n'ont pas de contructeur par defaut. Je suis programmeur java et il me suffit de faire
Brick[] bricks=new Brick[50]; puis si je veux initialiser un Brick je fais bricks[10]=new Brick(10,10);
Parce que la declaration Java Brick [] foo; est grosso-modo equivalente en C++ a vector<Brick*> foo; ou, sans vector (mais on se demande pourquoi s'en passer, surtout dans ce cas), a Brick**
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
Jean-Marc Bourguet
"Arman Ozcelik" writes:
Jai une classe Brick avec un contructeur: Brick(int width , int height) cette classe n'a pas de constructeur par defaut.
Maintenant je declare dans une autre classe un pointeur comme ceci ;
Brick *bricks;
lorsque je veux initialiser avec bricks=new Brick[50]; j'ai une erreur de compilation :no appropriate default constructor available.
Normal. Si tu veux des tableaux, utilise plutot std::vector. Utilise reserve pour reserver la taille et ensuite push_back pour initialiser les valeurs.
Je ne comprends pas comment je pourrais initaliser un tableau d'objets qui n'ont pas de contructeur par defaut.
Et comment ces objets seraient-ils initialise?
Je suis programmeur java et il me suffit de faire
Brick[] bricks=new Brick[50]; puis si je veux initialiser un Brick je fais bricks[10]=new Brick(10,10);
Je connais mal Java, mais j'ai l'impression qu'un plus proche equivalent C++ de ce que tu as ecrit est
Brick **bricks = new *Brick[50]; for (int i = 0; i != 50; ++i) bricks[i] = NULL;
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
"Arman Ozcelik" <arooz@wanadoo.fr> writes:
Jai une classe Brick avec un contructeur: Brick(int width , int
height) cette classe n'a pas de constructeur par defaut.
Maintenant je declare dans une autre classe un pointeur comme ceci ;
Brick *bricks;
lorsque je veux initialiser avec bricks=new Brick[50];
j'ai une erreur de compilation :no appropriate default constructor
available.
Normal. Si tu veux des tableaux, utilise plutot std::vector. Utilise
reserve pour reserver la taille et ensuite push_back pour initialiser
les valeurs.
Je ne comprends pas comment je pourrais initaliser un tableau
d'objets qui n'ont pas de contructeur par defaut.
Et comment ces objets seraient-ils initialise?
Je suis programmeur java et il me suffit de faire
Brick[] bricks=new Brick[50];
puis si je veux initialiser un Brick je fais bricks[10]=new Brick(10,10);
Je connais mal Java, mais j'ai l'impression qu'un plus proche
equivalent C++ de ce que tu as ecrit est
Brick **bricks = new *Brick[50];
for (int i = 0; i != 50; ++i)
bricks[i] = NULL;
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jai une classe Brick avec un contructeur: Brick(int width , int height) cette classe n'a pas de constructeur par defaut.
Maintenant je declare dans une autre classe un pointeur comme ceci ;
Brick *bricks;
lorsque je veux initialiser avec bricks=new Brick[50]; j'ai une erreur de compilation :no appropriate default constructor available.
Normal. Si tu veux des tableaux, utilise plutot std::vector. Utilise reserve pour reserver la taille et ensuite push_back pour initialiser les valeurs.
Je ne comprends pas comment je pourrais initaliser un tableau d'objets qui n'ont pas de contructeur par defaut.
Et comment ces objets seraient-ils initialise?
Je suis programmeur java et il me suffit de faire
Brick[] bricks=new Brick[50]; puis si je veux initialiser un Brick je fais bricks[10]=new Brick(10,10);
Je connais mal Java, mais j'ai l'impression qu'un plus proche equivalent C++ de ce que tu as ecrit est
Brick **bricks = new *Brick[50]; for (int i = 0; i != 50; ++i) bricks[i] = NULL;
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jonathan Mcdougall
Jai une classe Brick avec un contructeur: Brick(int width , int height) cette classe n'a pas de constructeur par defaut.
Maintenant je declare dans une autre classe un pointeur comme ceci ;
Brick *bricks;
lorsque je veux initialiser avec bricks=new Brick[50]; j'ai une erreur de compilation :no appropriate default constructor available.
C'est impossible en C++. Tu as deux solutions :
1)
Brick **bricks;
// bricks est un tableau de 50 pointeurs vers des Brick // schématiquement : // // 1 2 3 4 ... 48 49 50 // -+---+---+---+---+- -+---+---+---+- // | | | | | . | | | | // -+---+---+---+---+- -+---+---+---+- // bricks = new *Bricks[50];
// maintenant, tu n'as qu'à créer chaque Brick individuellement // // 1 2 3 4 ... 48 49 50 // -+---+---+---+---+- -+---+---+---+- // | o | o | o | | . | | | | // -+-|-+-|-+-|-+---+- -+---+---+---+- // | | | // | | +-----+ // V +--+ | // +---+ | V // | | V +---+ // | | +---+ | | // +---+ | | | | // | | +---+ // +---+ // où chaque boite est un objet Brick // for ( int i=0; i<50; ++i ) bricks[i] = new Brick(10, 10);
// on peut maintenant avoir accès aux objets Brick comme ça // Brick *ma_brick = bricks[10];
ma_brick->afficher();
2)
Utiliser un std::vector (recommandé)
# include <vector>
int main() { // on peut voir un vector comme étant un array qui grandit // sur demande. Ici, il est vide. // std::vector<Brick> bricks;
// ici, on ajoute 50 nouveaux objets Brick un après l'autre // for ( int i=0; i<50; ++i) bricks.push_back(Brick(10, 10));
// on peut alors leur accéder comme ]ca // bricks[10].afficher(); }
Jonathan
Jai une classe Brick avec un contructeur: Brick(int width , int
height) cette classe n'a pas de constructeur par defaut.
Maintenant je declare dans une autre classe un pointeur comme ceci ;
Brick *bricks;
lorsque je veux initialiser avec bricks=new Brick[50];
j'ai une erreur de compilation :no appropriate default constructor
available.
C'est impossible en C++. Tu as deux solutions :
1)
Brick **bricks;
// bricks est un tableau de 50 pointeurs vers des Brick
// schématiquement :
//
// 1 2 3 4 ... 48 49 50
// -+---+---+---+---+- -+---+---+---+-
// | | | | | . | | | |
// -+---+---+---+---+- -+---+---+---+-
//
bricks = new *Bricks[50];
// maintenant, tu n'as qu'à créer chaque Brick individuellement
//
// 1 2 3 4 ... 48 49 50
// -+---+---+---+---+- -+---+---+---+-
// | o | o | o | | . | | | |
// -+-|-+-|-+-|-+---+- -+---+---+---+-
// | | |
// | | +-----+
// V +--+ |
// +---+ | V
// | | V +---+
// | | +---+ | |
// +---+ | | | |
// | | +---+
// +---+
// où chaque boite est un objet Brick
//
for ( int i=0; i<50; ++i )
bricks[i] = new Brick(10, 10);
// on peut maintenant avoir accès aux objets Brick comme ça
//
Brick *ma_brick = bricks[10];
ma_brick->afficher();
2)
Utiliser un std::vector (recommandé)
# include <vector>
int main()
{
// on peut voir un vector comme étant un array qui grandit
// sur demande. Ici, il est vide.
//
std::vector<Brick> bricks;
// ici, on ajoute 50 nouveaux objets Brick un après l'autre
//
for ( int i=0; i<50; ++i)
bricks.push_back(Brick(10, 10));
// on peut alors leur accéder comme ]ca
//
bricks[10].afficher();
}
int main() { // on peut voir un vector comme étant un array qui grandit // sur demande. Ici, il est vide. std::vector<Brick> bricks;
// ici, on ajoute 50 nouveaux objets Brick un après l'autre for ( int i=0; i<50; ++i) bricks.push_back(Brick(10, 10)); }
Je ne crois pas que cette solution résolve son problème d'absence de constructeur sans arguments.
Ah non?
Jonathan
kanze
Luc Hermitte wrote in message news:...
"Jonathan Mcdougall" wrote in news:eTDib.36768$:
2) Utiliser un std::vector (recommandé)
# include <vector>
int main() { // on peut voir un vector comme étant un array qui grandit // sur demande. Ici, il est vide. std::vector<Brick> bricks;
// ici, on ajoute 50 nouveaux objets Brick un après l'autre for ( int i=0; i<50; ++i) bricks.push_back(Brick(10, 10)); }
Je ne crois pas que cette solution résolve son problème d'absence de constructeur sans arguments.
Pourquoi pas ? Moi, je crois que ça le résoudre.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Luc Hermitte <hermitte@free.fr.invalid> wrote in message
news:<Xns941464BE8621isyfur@127.0.0.1>...
"Jonathan Mcdougall" <jonathanmcdougall@DELyahoo.ca> wrote in
news:eTDib.36768$kY1.784566@weber.videotron.net:
2) Utiliser un std::vector (recommandé)
# include <vector>
int main()
{
// on peut voir un vector comme étant un array qui grandit
// sur demande. Ici, il est vide.
std::vector<Brick> bricks;
// ici, on ajoute 50 nouveaux objets Brick un après l'autre
for ( int i=0; i<50; ++i)
bricks.push_back(Brick(10, 10));
}
Je ne crois pas que cette solution résolve son problème d'absence de
constructeur sans arguments.
Pourquoi pas ? Moi, je crois que ça le résoudre.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
int main() { // on peut voir un vector comme étant un array qui grandit // sur demande. Ici, il est vide. std::vector<Brick> bricks;
// ici, on ajoute 50 nouveaux objets Brick un après l'autre for ( int i=0; i<50; ++i) bricks.push_back(Brick(10, 10)); }
Je ne crois pas que cette solution résolve son problème d'absence de constructeur sans arguments.
Pourquoi pas ? Moi, je crois que ça le résoudre.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
kanze
"Arman Ozcelik" wrote in message news:<bme887$f5f$...
J' ai un petit probleme d'initalization.
Jai une classe Brick avec un contructeur: Brick(int width , int height) cette classe n'a pas de constructeur par defaut.
Maintenant je declare dans une autre classe un pointeur comme ceci ;
Brick *bricks;
lorsque je veux initialiser avec bricks=new Brick[50]; j'ai une erreur de compilation :no appropriate default constructor available.
C'est normal.
Je ne comprends pas comment je pourrais initaliser un tableau d'objets qui n'ont pas de contructeur par defaut.
Tu ne peux pas. C'est aussi simple que ça. Pour faire un tableau (au moins, un tableau de type C), il faut un constructeur par défaut.
Je suis programmeur java et il me suffit de faire
Brick[] bricks=new Brick[50]; puis si je veux initialiser un Brick je fais bricks[10]=new Brick(10,10);
Comment faire la même chose en c++
Pour faire exactement la même chose :
Brick** bricks = new Brick*[ 50 ] ; bricks[ 10 ] = new Brick( 10,10 ) ;
En revanche, au moins que les Brick ont une identité, je ne crois pas que c'est une bonne idée.
La meilleur solution, probablement, c'est :
std::vector< Brick > bricks ;
puis de les initialiser avec vector::push_back. Sinon, tu pourrais donner un constructeur par défaut à Brick. D'après mon expérience, c'est bonne idée en général que les types à valeur aient un constructeur par défaut.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"Arman Ozcelik" <arooz@wanadoo.fr> wrote in message
news:<bme887$f5f$1@news-reader4.wanadoo.fr>...
J' ai un petit probleme d'initalization.
Jai une classe Brick avec un contructeur: Brick(int width , int
height) cette classe n'a pas de constructeur par defaut.
Maintenant je declare dans une autre classe un pointeur comme ceci ;
Brick *bricks;
lorsque je veux initialiser avec bricks=new Brick[50];
j'ai une erreur de compilation :no appropriate default constructor
available.
C'est normal.
Je ne comprends pas comment je pourrais initaliser un tableau d'objets
qui n'ont pas de contructeur par defaut.
Tu ne peux pas. C'est aussi simple que ça. Pour faire un tableau (au
moins, un tableau de type C), il faut un constructeur par défaut.
Je suis programmeur java et il me suffit de faire
Brick[] bricks=new Brick[50];
puis si je veux initialiser un Brick je fais bricks[10]=new
Brick(10,10);
Comment faire la même chose en c++
Pour faire exactement la même chose :
Brick** bricks = new Brick*[ 50 ] ;
bricks[ 10 ] = new Brick( 10,10 ) ;
En revanche, au moins que les Brick ont une identité, je ne crois pas
que c'est une bonne idée.
La meilleur solution, probablement, c'est :
std::vector< Brick > bricks ;
puis de les initialiser avec vector::push_back. Sinon, tu pourrais
donner un constructeur par défaut à Brick. D'après mon expérience, c'est
bonne idée en général que les types à valeur aient un constructeur par
défaut.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"Arman Ozcelik" wrote in message news:<bme887$f5f$...
J' ai un petit probleme d'initalization.
Jai une classe Brick avec un contructeur: Brick(int width , int height) cette classe n'a pas de constructeur par defaut.
Maintenant je declare dans une autre classe un pointeur comme ceci ;
Brick *bricks;
lorsque je veux initialiser avec bricks=new Brick[50]; j'ai une erreur de compilation :no appropriate default constructor available.
C'est normal.
Je ne comprends pas comment je pourrais initaliser un tableau d'objets qui n'ont pas de contructeur par defaut.
Tu ne peux pas. C'est aussi simple que ça. Pour faire un tableau (au moins, un tableau de type C), il faut un constructeur par défaut.
Je suis programmeur java et il me suffit de faire
Brick[] bricks=new Brick[50]; puis si je veux initialiser un Brick je fais bricks[10]=new Brick(10,10);
Comment faire la même chose en c++
Pour faire exactement la même chose :
Brick** bricks = new Brick*[ 50 ] ; bricks[ 10 ] = new Brick( 10,10 ) ;
En revanche, au moins que les Brick ont une identité, je ne crois pas que c'est une bonne idée.
La meilleur solution, probablement, c'est :
std::vector< Brick > bricks ;
puis de les initialiser avec vector::push_back. Sinon, tu pourrais donner un constructeur par défaut à Brick. D'après mon expérience, c'est bonne idée en général que les types à valeur aient un constructeur par défaut.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Luc Hermitte
wrote in news::
Je ne crois pas que cette solution résolve son problème d'absence de constructeur sans arguments. Pourquoi pas ? Moi, je crois que ça le résoudre.
Au temps pour moi, je viens de vérifier et j'ai été extrapolé (à tort) ce qui ce passait avec std::vector<Brick> titi(10); (qui requiert le constructeur sans arguments) à reserve() et push_back().
-- Luc Hermitte <hermitte at free.fr> FAQ de <news:fr.comp.lang.c++> : <http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/> Dejanews : <http://groups.google.com/advanced_group_search>
kanze@gabi-soft.fr wrote in
news:d6652001.0310140007.313e0f6f@posting.google.com:
Je ne crois pas que cette solution résolve son problème d'absence de
constructeur sans arguments.
Pourquoi pas ? Moi, je crois que ça le résoudre.
Au temps pour moi, je viens de vérifier et j'ai été extrapolé (à tort) ce
qui ce passait avec
std::vector<Brick> titi(10);
(qui requiert le constructeur sans arguments) à reserve() et push_back().
--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>
Je ne crois pas que cette solution résolve son problème d'absence de constructeur sans arguments. Pourquoi pas ? Moi, je crois que ça le résoudre.
Au temps pour moi, je viens de vérifier et j'ai été extrapolé (à tort) ce qui ce passait avec std::vector<Brick> titi(10); (qui requiert le constructeur sans arguments) à reserve() et push_back().
-- Luc Hermitte <hermitte at free.fr> FAQ de <news:fr.comp.lang.c++> : <http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/> Dejanews : <http://groups.google.com/advanced_group_search>