IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Classe et Tableau en argument


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 49
    Points
    49
    Par défaut Classe et Tableau en argument
    Bonjour,
    Je suis débutant en C++ et je bosse les rattrapages de septembre . Je me suis fixé comme objectif d'arriver à intégrer un tableau d'entier comme argument d'une Classe . Malheureusement je n'arrive pas à afficher l'objet découlant de cette classe . J'obtiens l'erreur suivante :
    error: request for member 'affiche' in 'p1', which is of non-class type 'Polynomial(int*)' p1.affiche();
    Voici mon programme :
    Pour le constructeur (Polynomial.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
    #ifndef DEF_POLYNOMIAL
    #define DEF_POLYNOMIAL
    #include <iostream>
     
    class Polynomial
    {
    private:
    int matrix [5][5];	
     
    public:
    		Polynomial ();
    		Polynomial (int t[25] );
    		void affiche();
    };
    #endif
    Pour la Classe en 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
    #include "Polynomial.h"
    #include <iostream>
    #include <stdlib.h>
     
    using namespace std;
     
    Polynomial::Polynomial(int t[25])
    {int a=0;
    int ** matrix = new int*[5];
    for (int i=0;i<5;i++){
    	matrix [i] = new int[5];
    	cout <<"en cours";
    }
     
    	for (int i=0;i<5;i++){
    		for (int j=0;j<5;j++){
    		matrix[i][j]=t[a];
    		a++;
    	}
    	};
    }
     
    void Polynomial::affiche()
    {
    	for (int i=0;i<5;i++){
    		for (int j=0;j<5;j++){
    		cout<<matrix[i][j]<<endl;	
    	};
    	};
     
    };
    et pour le Main :

    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
    #include "Polynomial.h"
    #include <iostream>
    using namespace std;
     
    int main()
    {
    	int array1[25] = {1, 2, 3, 4, 5 ,1, 2, 3, 4, 5,1, 2, 3, 4, 5, 1, 2, 3, 4, 5,1, 2, 3, 4, 5};
     
    	Polynomial p1(int array1[25]) ;
     
    	for (int i=0;i<25;i++){
    		if (i%5==0) { cout<<array1[i];}
    	}
     
    	p1.affiche();
     
        return 0;
    }
    Alors si quelqu'un peut m'expliquer pourquoi ça ne marche pas et ce que je dois faire pour faire en sorte que ça tourne cela serait très sympa.
    En vous remerciant à tous de votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Polynomial p1(int array1[25]) ; n'a jamais été la syntaxe pour créer une instance. C'est la syntaxe d'une forward declaration d'une fonction p1 qui retourne un Polynomial et prend int[25] en paramètre.
    Sinon quitte à vouloir faire du C++ : std::vector, std::array ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Citation Envoyé par Bousk Voir le message
    C'est la syntaxe d'une forward declaration d'une fonction p1 qui retourne un Polynomial et prend int[25] en paramètre.
    Je me permets d'intervenir sur la partie grasse: le type du paramètre n'est pas un int[25], mais int*. Parce que c'est comme ça pour les tableaux C...

    En C++, le bon type pour le tableau à taille statique est std::array et std::vector pour les dynamiques.

    Au passage, matrix n'est pas initialisé dans le constructeur, il y a à la place une variable locale construite, initialisée et puis jetée. Et la fonction affiche devrait être const.

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par johanndebutant Voir le message
    Bonjour,
    Je suis débutant en C++ et je bosse les rattrapages de septembre
    Quand tu écris septembre, c'est septembre 2021 ou septembre 1998? Car ton code correspond au C++ tel qu'on l'écrivait à cette époque. En 2021, on aurait plutôt quelque chose chose comme:
    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
    // fichier Polynomial.h
    //=====================
    #ifndef POLYNOMIAL_H__
    #define POLYNOMIAL_H__
    #include <array>
     
    class Polynomial {
    public:
    	Polynomial() = default;
    	Polynomial( std::array<int,5*5>const&  t );
    	void  affiche()const;
    private:
    	std::array<std::array<int,5>,5>  matrix;
    };
    #endif // POLYNOMIAL_H__
     
    // fichier Polynomial.cpp
    //=======================
    #include "Polynomial.h"
    #include <iostream>
    #include <cstdlib>
     
    Polynomial::Polynomial( std::array<int,5*5>const&  t ) {
    	std::size_t  a{};
    	for ( auto& subtab : matrix ) {
    		for ( int& x : subtab ) {
    			x = t[a++];
    		}
    	}
    }
     
    void  Polynomial::affiche()const {
    	for ( auto const& subtab : matrix ) {
    		for ( int x : subtab ) {
    			std::cout << x << ' ';
    		}
    		endl( std::cout );
    	}
    };
     
    // fichier Main.cpp
    //=================
    #include "Polynomial.h"
    #include <iostream>
    #include <array>
     
    int  main() {
    	std::array  array1{1, 2, 3, 4, 5,  1, 2, 3, 4, 5,  1, 2, 3, 4, 5,  1, 2, 3, 4, 5,  1, 2, 3, 4, 5};
     
    	Polynomial  p1{array1};
     
    	for ( std::size_t i{} ; i < array1.size() ; i++ ) {
    		if ( i % 5 == 0 ) {
    			std::cout << array1[i] << ' ';
    		}
    	}
    	endl( std::cout );
     
    	p1.affiche();
    }

  5. #5
    Membre du Club
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 49
    Points
    49
    Par défaut
    Merci beaucoup à tous pour vos réponses très constructives. Il y a des choses que je n'avais pas intégrées ! et pour répondre à une dernière interrogation effectivement j'ai bossé sur de vieux bouquins notamment Visual C++6 de Ivor Horton et une des premières éditions d'un bouquin d'exos Delannoy(juillet 1997) .... On se rapproche de 1998 !!!
    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/04/2006, 20h18
  2. [String] formater une chaine avec un tableau d'argument
    Par jakouz dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 14/04/2006, 15h19
  3. passer un tableau d'arguments à un thread
    Par madimane dans le forum POSIX
    Réponses: 5
    Dernier message: 14/04/2006, 07h08
  4. Classe de tableau évoluée
    Par numberwan dans le forum Débuter
    Réponses: 2
    Dernier message: 03/04/2003, 16h15
  5. fonction renvoyant un tableau en argument
    Par Jones dans le forum Langage
    Réponses: 6
    Dernier message: 30/09/2002, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo