Fix issues preventing compilation
authorLukas Jiriste <ljiriste@student.42prague.com>
Fri, 25 Oct 2024 14:36:55 +0000 (16:36 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Fri, 25 Oct 2024 14:36:55 +0000 (16:36 +0200)
These include mostly missing includes, missing declarations, missing
Class:: namespaces before function definitions and typos.
A circular dependency between header files of  AMateria and ICharacter
needed to be solved.

12 files changed:
ex03/AMateria.cpp
ex03/AMateria.h
ex03/Character.cpp
ex03/Character.h
ex03/Cure.cpp
ex03/Cure.h
ex03/ICharacter.h
ex03/IMateriaSource.h
ex03/Ice.cpp
ex03/Ice.h
ex03/MateriaSource.cpp
ex03/MateriaSource.h

index 831d4c376ccc6049e77151516682f6b2cffa4948..2156958082cb4b0e7bdda895dab67139183d62de 100644 (file)
@@ -1,6 +1,7 @@
 #include "AMateria.h"
 #include "ICharacter.h"
 #include <string>
+#include <iostream>
 
 AMateria::AMateria()
 {
@@ -17,6 +18,9 @@ AMateria::~AMateria()
 
 AMateria       &AMateria::operator=(const AMateria &other)
 {
+       if (this == &other)
+               return (*this);
+       return (*this);
 }
 
 AMateria::AMateria(const std::string &type)
@@ -24,12 +28,17 @@ AMateria::AMateria(const std::string &type)
 {
 }
 
-const std::string      &getType() const
+const std::string      &AMateria::getType() const
 {
        return (m_type);
 }
 
-void   use(ICharacter &target);
+void   AMateria::use(ICharacter &target)
 {
        std::cout << "* AMATERIA AFFECTS " << target.getName() << " *\n";
 }
+
+bool           AMateria::operator==(const std::string &type)
+{
+       return (m_type == type);
+}
index b4c807356f1b92bba73300e122e4446da1c68db8..f20b14396ab4e34819004ee2b261a0cc55608454 100644 (file)
@@ -4,6 +4,8 @@
 # include "ICharacter.h"
 # include <string>
 
+class ICharacter;
+
 class AMateria
 {
        private:
@@ -21,6 +23,8 @@ class AMateria
 
                virtual AMateria        *clone() const = 0;
                virtual void            use(ICharacter &target);
+
+               bool            operator==(const std::string &type);
 };
 
 #endif // AMATERIA_H
index f77652087372989a1cbe97362b93e478570fdd02..64c4526523344682efb1338f31489cca5e86412e 100644 (file)
@@ -11,7 +11,7 @@ Character::Character(const std::string &name)
        : m_name(name)
 {
        for (size_t i(0); i < INVENTORY_SIZE; ++i)
-               inventory[i] = NULL;
+               m_inventory[i] = NULL;
 }
 
 Character::Character(const Character &other)
@@ -19,21 +19,24 @@ Character::Character(const Character &other)
 {
        for (size_t i(0); i < INVENTORY_SIZE; ++i)
        {
-               if (other.inventor[i] == NULL)
-                       inventory[i] = NULL;
+               if (other.m_inventory[i] == NULL)
+                       m_inventory[i] = NULL;
                else
-                       inventory[i] = other.inventory[i]->clone();
+                       m_inventory[i] = other.m_inventory[i]->clone();
        }
 }
 
 Character::~Character()
 {
        for (size_t i(0); i < INVENTORY_SIZE; ++i)
-               delete inventory[i];
+               delete m_inventory[i];
 }
 
 Character      &Character::operator=(const Character &other)
 {
+       if (this == &other)
+               return (*this);
+       return (*this);
 }
 
 void   Character::equip(AMateria *materia)
@@ -41,25 +44,25 @@ void        Character::equip(AMateria *materia)
        for (size_t i(0); i < INVENTORY_SIZE; ++i)
                if (m_inventory[i] == NULL)
                {
-                       m_inventory[i] = materia
+                       m_inventory[i] = materia;
                                return ;
                }
 }
 
 void   Character::unequip(int idx)
 {
-       if (idx < 0 || idx >= INVENTORY_SIZE)
+       if (idx < 0 || (size_t)idx >= INVENTORY_SIZE)
                return ;
        m_inventory[idx] = NULL;
 }
 
 void   Character::use(int idx, ICharacter &target)
 {
-       if (idx < 0 || idx >= INVENTORY_SIZE)
+       if (idx < 0 || (size_t)idx >= INVENTORY_SIZE)
                return ;
-       if (m_inventory[i] == NULL)
+       if (m_inventory[idx] == NULL)
                return ;
-       m_inventory[i]->use(target);
+       m_inventory[idx]->use(target);
 }
 
 const std::string      &Character::getName() const
index 0428f6d4e17d92e7cf95ee74935ea142d4710445..bbbd733df9988a81364a171b9e62fa531ffd107b 100644 (file)
@@ -19,9 +19,10 @@ class Character : public ICharacter
                AMateria                        *m_inventory[INVENTORY_SIZE];
 
        public:
-               Character(std::string name);
+               Character(const std::string &name);
                ~Character();
 
+               const std::string       &getName() const;
                void    equip(AMateria *materia);
                void    unequip(int idx);
                void    use(int idx, ICharacter &target);
index 56eaff2cad76f7683837e9ba8587cb8e3af92b29..3a8b745b79b544c95cf37ef80551aa8ae428da7b 100644 (file)
@@ -17,14 +17,17 @@ Cure::~Cure()
 
 Cure   &Cure::operator=(const Cure &other)
 {
+       if (this == &other)
+               return (*this);
+       return (*this);
 }
 
-AMateria       *clone() const
+AMateria       *Cure::clone() const
 {
-       return (new Ice(*this));
+       return (new Cure(*this));
 }
 
-void   use(ICharacter& target)
+void   Cure::use(ICharacter& target)
 {
-       std::cout << "* heals " << target.getName << "'s wounds *\n";
+       std::cout << "* heals " << target.getName() << "'s wounds *\n";
 }
index 2b9ee9db70cb1b2286a465a0ab00d53d3e8acc61..775a15dd169a249d1a11463c394155f46fe1d64c 100644 (file)
@@ -1,6 +1,9 @@
 #ifndef CURE_H
 # define CURE_H
 
+# include "AMateria.h"
+# include "ICharacter.h"
+
 class Cure : public AMateria
 {
        private:
@@ -10,6 +13,9 @@ class Cure : public AMateria
                Cure();
                Cure(const Cure &other);
                ~Cure();
+
+               AMateria        *clone() const;
+               void            use(ICharacter &target);
 };
 
 #endif // CURE_H
index 91e015e33da90822ec6a0d3fe1017b612559156c..fb353cc2a3f8af3af87331c7d9d642d2f400d972 100644 (file)
@@ -1,6 +1,11 @@
 #ifndef ICHARACTER_H
 # define ICHARACTER_H
 
+# include "AMateria.h"
+# include <string>
+
+class AMateria;
+
 class ICharacter
 {
        public:
index fbd16af6a323b4cf73ca41bebed387a822bd5fbf..515d9f7cd23ac921b635c373b91716e84a52f744 100644 (file)
@@ -6,7 +6,7 @@ class IMateriaSource
        public:
                virtual ~IMateriaSource() {}
 
-               virtual void            leanMateria(AMateria *) = 0;
+               virtual void            learnMateria(AMateria *) = 0;
                virtual AMateria        *createMateria(const std::string &type) = 0;
 };
 
index 2e8a357c2f8e136fd1a8d24db89e51a60b38ca8d..98a0d11bf98be5c0252b03b59a5cf94084b674bf 100644 (file)
@@ -7,7 +7,7 @@ Ice::Ice()
 }
 
 Ice::Ice(const Ice &other)
-       : AMateria(other);
+       : AMateria(other)
 {
 }
 
@@ -17,14 +17,17 @@ Ice::~Ice()
 
 Ice    &Ice::operator=(const Ice &other)
 {
+       if (this == &other)
+               return (*this);
+       return (*this);
 }
 
-AMateria       *clone() const
+AMateria       *Ice::clone() const
 {
        return (new Ice(*this));
 }
 
-void   use(ICharacter& target)
+void   Ice::use(ICharacter& target)
 {
-       std::cout << "* shoots an ice bolt at " << target.getName << " *\n";
+       std::cout << "* shoots an ice bolt at " << target.getName() << " *\n";
 }
index c69a36e3f339915725839d3a39bc0f890978355d..f8d113005653eb243962ee6296a98f876b29f947 100644 (file)
@@ -1,6 +1,9 @@
 #ifndef ICE_H
 # define ICE_H
 
+# include "AMateria.h"
+# include "ICharacter.h"
+
 class Ice : public AMateria
 {
        private:
@@ -10,6 +13,9 @@ class Ice : public AMateria
                Ice();
                Ice(const Ice &other);
                ~Ice();
+
+               AMateria        *clone() const;
+               void            use(ICharacter &target);
 };
 
 #endif // ICE_H
index c97a13f074abd5008e848ca93bb5ec8a73f0e8c3..a84d6fcb550d59cf054d15bda511e4efc2487aa5 100644 (file)
@@ -1,4 +1,5 @@
 #include "MateriaSource.h"
+#include "AMateria.h"
 
 MateriaSource::MateriaSource()
        : m_num_known(0)
@@ -20,7 +21,7 @@ MateriaSource::~MateriaSource()
 
 void   MateriaSource::deleteKnown()
 {
-       for (; m_num_know > 0;)
+       for (; m_num_known > 0;)
                delete m_known_materia[--m_num_known];
 }
 
@@ -29,6 +30,7 @@ MateriaSource &MateriaSource::operator=(const MateriaSource &other)
        deleteKnown();
        for (; m_num_known < other.m_num_known; ++m_num_known)
                m_known_materia[m_num_known] = other.m_known_materia[m_num_known]->clone();
+       return (*this);
 }
 
 void   MateriaSource::learnMateria(AMateria *materia)
@@ -42,7 +44,7 @@ void  MateriaSource::learnMateria(AMateria *materia)
 AMateria       *MateriaSource::createMateria(const std::string &type)
 {
        for (size_t i(0); i < m_num_known; ++i)
-               if (m_known_materia[i] == type)
+               if (*m_known_materia[i] == type)
                        return (m_known_materia[i]->clone());
        return (NULL);
 }
index 72fedf1cfe68a31ff2813eafefaa89432ac6baab..0c6ca2ae9d995375a0762123c9771613d4b5bcbe 100644 (file)
@@ -4,10 +4,11 @@
 # include "AMateria.h"
 # include "IMateriaSource.h"
 
-class MateriaSource : IMateriaSource
+class MateriaSource : public IMateriaSource
 {
        private:
                MateriaSource   &operator=(const MateriaSource &other);
+               void                    deleteKnown();
 
                static const size_t     max_known = 4;