c++ héritage de classe, undefined reference to 'Classe::Constructeur()'
Edit: Posté code fixe à la partie inférieure. Merci à tous pour votre aide!
Je suis juste l'apprentissage de c++ et j'ai du mal avec l'héritage. J'ai cherché et cherché et essayé tout ce que je peux mais je ne peux pas obtenir ce code pour compiler tout en gardant la fonctionnalité que je veux qu'il ait.
Je me sens comme je suis en faisant une erreur stupide ou peut-être que je suis juste en manque quelques gros concept, mais si quelqu'un pouvait jeter un coup d'oeil j'avais vraiment l'apprécier!
Si j'ai fait un commentaire le 3 lignes dans le StarSystem Constructeur qui créent des objets, alors qu'il compile, donc je sais que cela a à voir avec la question.
#include <iostream>
#include <vector>
#include <string>
#include <stdlib.h>
#include <time.h>
using namespace std;
class SystemBody
{
public:
SystemBody();
int systembodyindex;
int starsystemindex;
SystemBody(int systembodyindex, int starsystemindex)
{
cout << "StarSystem " << starsystemindex << ": creating empty SystemBody " << systembodyindex << endl;
}
};
class Star : public SystemBody
{
public:
Star();
string startype;
Star(int systembodyindex, int starsystemindex)
{
cout << "StarSystem " << starsystemindex << ": converting empty SystemBody into Star " << systembodyindex << endl;
}
};
class Planet : public SystemBody
{
public:
Planet();
string planettype;
Planet(int systembodyindex, int starsystemindex)
{
cout << "StarSystem " << starsystemindex << ": converting empty SystemBody into Planet " << systembodyindex << endl;
}
};
class ExitNode : public SystemBody
{
public:
ExitNode();
vector<int> connectedindexlist;
ExitNode(int systembodyindex, int starsystemindex)
{
cout << "StarSystem " << starsystemindex << ": converting empty SystemBody into Exit Node " << systembodyindex << endl;
}
};
class StarSystem
{
public:
StarSystem();
int starsystemindex;
vector<StarSystem> connectedlist;
vector<Planet> planetlist;
StarSystem(int index)
{
starsystemindex = index;
cout << "--Creating StarSystem: " << starsystemindex << endl;
int numberofbodies = (rand() % 4) + 2;
for ( int i = 0; i < numberofbodies; i +=1 )
{
if ( i == 0 )
{
Star body(i, starsystemindex);
}
else if ( i == numberofbodies )
{
ExitNode body(i, starsystemindex);
}
else
{
Planet body(i, starsystemindex);
}
}
}
void addConnection(StarSystem connectedstarsystem)
{
cout << "--StarSystem " << starsystemindex << ": Adding connection to StarSystem " << connectedstarsystem.starsystemindex << endl;
connectedlist.push_back(connectedstarsystem);
}
};
int main()
{
srand(time(0));
StarSystem starsystem0(0);
return 0;
}
EDIT:
merci à tous pour votre aide! simplement poster le code fixe ici dans le cas de l'un à l'avenir, pourrait trouver cela utile.
#include <iostream>
#include <vector>
#include <string>
#include <stdlib.h>
#include <time.h>
using namespace std;
class SystemBody
{
public:
int systembodyindex;
int starsystemindex;
SystemBody ( )
{
cout << "----SystemBody BEING CREATED WITH NO PARAMETERS" << endl;
}
SystemBody ( int bodyindex, int systemindex )
{
systembodyindex = bodyindex;
starsystemindex = systemindex;
cout << "----StarSystem " << starsystemindex << ": creating empty SystemBody " << systembodyindex << endl;
}
};
class Star : public SystemBody
{
public:
Star ( int bodyindex, int systemindex ) : SystemBody ( bodyindex, systemindex )
{
cout << "----StarSystem " << starsystemindex << ": converting empty SystemBody into Star " << systembodyindex << endl;
}
};
class Planet : public SystemBody
{
public:
Planet ( int bodyindex, int systemindex ) : SystemBody ( bodyindex, systemindex )
{
cout << "----StarSystem " << starsystemindex << ": converting empty SystemBody into Planet " << systembodyindex << endl;
}
};
class ExitNode : public SystemBody
{
public:
ExitNode ( int bodyindex, int systemindex ) : SystemBody ( bodyindex, systemindex )
{
cout << "----StarSystem " << starsystemindex << ": converting empty SystemBody into ExitNode " << systembodyindex << endl;
}
};
class StarSystem
{
public:
int starsystemindex;
vector<StarSystem> connectedlist;
vector<Planet> planetlist;
StarSystem ( int index )
{
starsystemindex = index;
cout << "--Creating StarSystem: " << starsystemindex << endl;
int numberofbodies = (rand() % 4 ) + 2;
for ( int i = 0; i <= numberofbodies; i +=1 )
{
if ( i == 0)
{
Star body(i, starsystemindex);
}
else if ( i == numberofbodies )
{
ExitNode body(i, starsystemindex);
}
else
{
Planet body(i, starsystemindex);
}
}
}
};
int main()
{
srand(time(0));
StarSystem starsystem0(0);
return 0;
}
- Pourriez-vous spécifier les fonctionnalités que vous souhaitez avoir?
- Je suis en train d'avoir un générique systembody de classe, qui ont membre des attributs et des méthodes qui sont communes à la les classes héritées des étoiles, de la planète et exitnode.
- Dans le constructeur, vous êtes en cours d'initialisation
Star
,ExitNode
etPlanet
objets basée sur la pile variables automatiques - celles-ci seront tous supprimés dès qu'ils sortent de la portée. Êtes-vous le sens de les ajouter à une liste ou un vecteur de la sorte? - Ils ne sont ajoutés à un vecteur dans une autre classe, j'ai essayé de tout simplement le code pour ce poste.
Vous devez vous connecter pour publier un commentaire.
Peut-être que c'est juste moi, mais votre Constructeur ici est une simple declration qui n'a pas été définis:
Vous avez un constructeur déclaré, mais il n'y a pas de définition de ce qui se passe réellement dans ce constructeur.
Si c'est un constructeur qui ne rien, faire
Comme une note de côté, lors de la publication de ces sortes de choses, cela permet de publier le numéro de l'erreur et de mettre un commentaire ou une sorte d'indicateur de l'endroit où l'erreur se passe (on peut le voir dans votre géant blob de code).
EDIT:
Une remarque importante, si vous ne l'utilisez pas que constructeur à tous, il suffit de supprimer le.
StarSystem();
flottant au sommet. Si vous ne voulez pas que pour être un constructeur, le supprimer du code entièrement.Vous pensez que parce que vous ne faites pas appel
SystemBody()
vous n'avez pas besoin de la définir. Cependant, vous êtes en l'appelant indirectement.Et ne pas faire
comme le suggère. Ce n'est pas ce que vous voulez. Au lieu de supprimer complètement si vous ne l'utilisez pas.
Votre classe Étoile hérite de
SystemBody
. Cela signifie que lorsqu'un nouveauStar
est construit le constructeur deSystemBody
est appelé.Cette ligne
est effectivement compilé pour
Le compilateur appelle le constructeur par défaut pour
SystemBody
si vous n'appelez pas un vous-même.Si vous pensez cela, vous devez initialiser
SystemBody
en quelque sorte lorsque vous créez un nouveauStar
. Vous pouvez le faire explicitement commeque vous avez défini de nombreux constructeurs par défaut, mais n'a pas les mettre en œuvre. Au lieu de
écrire