-3

Here's my problem error report:

Error   2   error LNK2019: unresolved external symbol 
"public: int __thiscall item::getSubstanceDurability(enum myEnums::MATERIAL)" (?getSubstanceDurability@item@@QAEHW4MATERIAL@myEnums@@@Z) referenced in function 
"public: virtual void __thiscall armor::setHardness(enum myEnums::MATERIAL,int)" (?setHardness@armor@@UAEXW4MATERIAL@myEnums@@H@Z)  
C:\Users\Raenir Salazar\My Projects\COMP345_Assignment2\COMP345_Assignment2\armor.obj   COMP345_Assignment2

Happens when I'm trying to compile. Here's my code:

Items.cpp

int getSubstanceHardness ( MATERIAL substance ) {
    switch (substance) {
    case 0:
        return 0;
        break;
    case 1:
        return 0;
        break;
    case 2:
        return 0;
        break;
    case 3:
        return 1;
        break;
    case 4:
        return 0;
        break;
    case 5:
        return 2;
        break;
    case 6:
        return 5;
        break;
    case 7:
        return 8;
        break;
    case 8:
        return 10;
        break;
    case 9:
        return 15;
        break;
    case 10:
        return 20;
        break;
    case 11:
        return 5;
        break;
    default:
        return 0;
        break;

    }
}

Items.h

int getSubstanceDurability ( MATERIAL );

armor. h & armor.cpp

class armor: public item {
    protected:
        int armorClass;
        int armorCheckPenalty;
        double arcaneSpellFailure;
        int maxDEXBonus;
        int speedPenalty;
        CHARACTER_ARMOR armorType;
    public:
        armor();
        armor( int, int, double, string, int, int, double, double, 
            CHARACTER_ARMOR, SIZE, MATERIAL, int /*+X*/ );

        int getArmorClass ();
        void setArmorClass ( int );
        int getArmorCheckPenalty ();
        void setArmorCheckPenalty( int );
        double getArcaneSpellFailure ();
        void setArcaneSpellFailure ( double );
        //void setArmorName ( string );
        int getMaxDEXBonus ();
        void setMaxDEXBonus ( int );
        int getspeedPenalty ();
        void setspeedPenalty ( int );
        CHARACTER_ARMOR getArmorType();
        void setArmorType( CHARACTER_ARMOR );
        void setDurability( MATERIAL, int /*AC*/, int /* +X */, SIZE );
        void setHardness( MATERIAL, int /* enhancement */ );
};

void armor::setHardness( MATERIAL substance, int enhancement ) {
    int substanceDensity; 
    substanceDensity = this->getSubstanceDurability( substance );
    int density;
    density = substanceDensity + (enhancement * 2);

    this->hardness = density;

    //this->hardness = ((this->getSubstanceDurability(substance)) + (enhancement * 2));
}

enum.h

#ifndef ENUM_H
#define ENUM_H

namespace myEnums
{
        enum CHARACTER_CLASS
        {
            FIGHTER, CLERIC, WIZARD,
            ROGUE, DRUID, RANGER, BARD,
            SORCERER, PALADIN

        };
        enum CHARACTER_WEAPON
        {
            NOTHING, LONGSWORD, SHORTSWORD, KATANA, AMMUNITION, GRAPPLE, RAY
        };
        enum WEAPON_CATEGORY 
        {
            SIMPLE, MARTIAL, EXOTIC,
        };
        enum WEAPON_SUBCATEGORY
        {
            UNARMED, LIGHT_MELEE, ONE_HANDED_MELEE, TWO_HANDED_MELEE, RANGED
        };
        enum CHARACTER_ARMOR
        {
            UNARMORED, CHAINMAIL, PADDED
        };
        enum CHARACTER_SHIELD
        {
            NONE, BUCKLER, LIGHT_WOODEN, LIGHT_STEEL, HEADY_WOODEN,
            HEAVY_STEEL, TOWER
        };
        enum CHARACTER_RACE
        {
            HUMAN, ELF, DROW, HALFLING,
            DWARF, GNOME
        };
        enum SIZE
        {
            FINE, DIMINUTIVE, TINY, SMALL, 
            MEDIUM, LARGE, HUGE, GARGANTUAN, 
            COLOSSAL, COLOSSAL_P, COLOSSAL_PP
        };
        enum DAMAGE_TYPE
        {
                // This one is tricky, some weapons
                // Can have multiple damage types...
            BLUDGEONING, SLASHING, PIERCING
        };
        enum MATERIAL
        {
            PAPER, CLOTH, ROPE, GLASS, ICE, LEATHER, WOOD,
            STONE, METAL, MITHRAL, ADAMANTINE, SOFT_METALS
        };
        enum BAB_PROGRESSION 
        {
            HIGH, MID, LOW
        };
        enum SAVING_THROW
        {
            HIGH_SAVE, LOW_SAVE
        };
};

No idea what's wrong, I've been poking around trying to fiddle with overloading and the signatures, double checking the data types but nothing gives an actual syntax error and as far as I can tell to the best of my knowledge...

RaenirSalazar
  • 556
  • 1
  • 7
  • 20
  • possible duplicate of [What is an undefined reference/unresolved external symbol error and how do I fix it?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix) – Peter Huene Nov 04 '13 at 21:14

1 Answers1

1

Turns out I goofed and accidentally had the wrong name on one of my functions, I'm surprised it even compiled that far. Sorry that I couldn't upvote the person who gave me the answer.

getSubstanceHardness was misnamed getSubstanceDurability.

RaenirSalazar
  • 556
  • 1
  • 7
  • 20