Toutes mes excuses pour le vidage de code:
gameObject.cpp:
#include "gameObject.h"
class gameObject
{
private:
int x;
int y;
public:
gameObject()
{
x = 0;
y = 0;
}
gameObject(int inx, int iny)
{
x = inx;
y = iny;
}
~gameObject()
{
//
}
int add()
{
return x+y;
}
};
gameObject.h:
class gameObject
{
private:
int x;
int y;
public:
gameObject();
gameObject(int inx, int iny);
~gameObject();
int add();
};
Les erreurs:
||=== terrac, Debug ===|
C:\terrac\gameObject.cpp|4|error: redefinition of `class gameObject'|
C:\terrac\gameObject.h|3|error: previous definition of `class gameObject'|
||=== Build finished: 2 errors, 0 warnings ===|
Je ne peux pas comprendre ce qui ne va pas. Aidez-moi?
Vous définissez la classe dans le fichier d'en-tête, incluez le fichier d'en-tête dans un fichier * .cpp et définissez la classe une seconde fois car la première définition est déplacée dans l'unité de traduction par le fichier d'en-tête. Toutefois, une seule définition de classe gameObject est autorisée par unité de traduction.
En réalité, vous n'avez pas besoin de définir la classe une seconde fois pour implémenter les fonctions. Implémentez les fonctions comme ceci:
#include "gameObject.h"
gameObject::gameObject(int inx, int iny)
{
x = inx;
y = iny;
}
int gameObject::add()
{
return x+y;
}
etc
l'implémentation dans le fichier cpp doit être sous la forme
gameObject::gameObject()
{
x = 0;
y = 0;
}
gameObject::gameObject(int inx, int iny)
{
x = inx;
y = iny;
}
gameObject::~gameObject()
{
//
}
int gameObject::add()
{
return x+y;
}
pas dans un bloc de définition class gameObject {}
Vous définissez la même classe deux fois, c'est pourquoi.
Si votre intention est d'implémenter les méthodes du fichier CPP, procédez comme suit:
gameObject::gameObject()
{
x = 0;
y = 0;
}
gameObject::~gameObject()
{
//
}
int gameObject::add()
{
return x+y;
}
ajouter des fichiers d'en-tête
#pragma once
Vous devriez envelopper le fichier .h
comme suit:
#ifndef Included_NameModel_H
#define Included_NameModel_H
// Existing code goes here
#endif
Incluez quelques #ifndef name #define name #endif préprocesseur qui devrait résoudre votre problème . Le problème est que cela passe de l’en-tête à la fonction puis à l’en-tête afin qu’elle redéfinisse la classe avec tout le préprocesseur ) plusieurs fois.
Vous définissez le class gameObject
dans votre fichier .cpp
et votre fichier .h
.
Cela crée une erreur de redéfinition.
Vous devez définir la classe,UNE FOIS, dansONEplace ..__ (la convention stipule que la définition est dans le .h
et que toute l'implémentation est dans le .cpp
)
S'il vous plaît, aidez-nous à mieux comprendre quelle partie du message d'erreur avez-vous eu des problèmes?
La première partie de l'erreur indique que la classe a été redéfinie dans gameObject.cpp
La deuxième partie de l'erreur indique que la définition précédente est dans gameObject.h
.
Combien plus clair le message pourrait-il être?