Problème sur une création de classe [Résolu]

Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- - Dernière réponse : cptpingu
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
- 18 févr. 2010 à 17:30
Bonjour,

Je bloque sur un problème de définition de classe et ça commence à me prendre la tête. Est-ce que vous pourriez m'indiquer ce qui ne vas pas parce que là j'ai épuisé ma patience...
merki d'avance

Le problème est le suivant : j'ai une classe Dates (fichier .cc et .h) qui contient une date de début, une date de fin et deux méthodes publiques pour récupérer ces dates. Compilation : Impeccable. Lors de l'édition des liens j'ai le message comme quoi dans main.cc, j'ai une "undefined reference to `CDates::CDates()', undefined reference to `CDates::getDateDebut()'"


fichier Dates.h
#ifndef DATES_H
#define DATES_H

class CDates
{
private :
std::string m_DateDebut;
std::string m_DateFin;
public :
CDates();
std::string getDateDebut();
std::string getDateFin();
};

#endif

Fichier Dates.cc
#include <string>
#include <Dates.h>

using namespace std;

CDates::CDates()
{
m_DateDebut = "";
m_DateFin = "";
}

string CDates::getDateDebut()
{
return m_DateDebut;
}

string CDates::getDateFin()
{
return m_DateFin;
}

fichier main.cc
#include <string>
#include <Dates.h>

using namespace std;

int main()
{
CDates test;

test.getDateDebut();
}

Simon
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014
3
Merci
Salut,

En survolant rapidement ... je crois que tu n'appelle pas ton constructeur.
Ton objet n'est pas alloué dans le tas.

Je fais pas de C++, donc je connais pas trop la syntaxe, mais en C# je ferais
CDates test = new CDates();

A+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Moomoon07
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11
3
Merci
merci pour la rapidité de ta réponse.
En fait, je viens de trouver mon erreur... dans la syntaxe de l'édition des liens
Pour info, en c++, tu peux aussi appeller le constructeur en instanciant une variable.


Simon

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de sp40
Messages postés
92
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
23 septembre 2015
3
Merci
Quand il n'y a pas d'argument pour ton constructeur, tu n'es pas obligé de mettre les parenthèses, et ce sur l'allocation dynamique comme statique


Coin coin !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dragonjoker59
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
En C++ si tu déclares un objet (pas un pointeur) il est alloué dans la pile, et la syntaxe de Moomoon07 n'est même pas correcte
CDates test();
ou bien
CDates* test = new CDates();

_____________________________________
Un éditeur de ressources gratuit pour Windows
Commenter la réponse de vecchio56
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11
0
Merci
Salut vecchio56

ok pour la syntaxe de l'allocation dynamique... mais pourquoi les parenthèses sur : CDates test();


Simon
Commenter la réponse de sp40
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci
A noter qu'il est préférable de ne pas mettre les parenthèses.
Le sens n'est pas le même avec et sans !!!
Lorsque l'on fait un new, pas de différence, mais sans le new, l'un veut dire "je construit l'objet" et l'autre "je declare une fonction qui retourne mon objet"

Voici un petit exemple récapitulatif:
#include 

class Toto
{
public:
  Toto()
  {
    std::cout << "Construction de Toto" << std::endl;
  }
};
int main()
{
  std::cout << "Init normal" << std::endl;
  Toto t;
  std::cout << "Constructeur initalise" << std::endl;

  std::cout << std::endl;

  std::cout << "Init invalide" << std::endl;
  Toto x();
  std::cout << "Et oui rien ne s'affiche..." << std::endl;

  std::cout << std::endl;
  std::cout << std::endl;

  std::cout << "Init normal" << std::endl;
  Toto* pt = new Toto;
  std::cout << "Constructeur initalise" << std::endl;
  delete pt;

  std::cout << std::endl;

  std::cout << "Init normal aussi" << std::endl;
  Toto* px = new Toto();
  std::cout << "Constructeur initalise" << std::endl;
  delete px;

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Commenter la réponse de cptpingu