Geowil
Geowil

Reputation: 680

Method is not accessible

I am working on a game at the moment and I am running into a small problem at the moment. It is nothing earth shattering but I will need to figure out how to fix it eventually so I thought I would pry some info from the good minds here while I continue to hammer out the shell of my game.

Anyway, what is going on is that the functions in some particular classes are being error lined (MSVS2010) as inaccessible. The functions in question are in public scope. The way the function call is being done is through an array of the object in which these functions are encapsulated. I am using an array for right now instead of vector because I am still learning if I can use vectors for what I am doing.

I will post up the specific code areas now but please realize this is earlier then alpha code so there may be glaring problems with the structure or actual syntax in regards to what I am attempting to do; fixing this kind of stuff is not my goal for this question so I would appreciate it if you could over look it unless it is what is causing the problem.

Ship.h:

public:
...

//define bomb holds
Bomb bHolds[8];

//define heavy weapons hardpoints
Heavy hWBays[8];

//define laser hardpoints
Laser lBanks[8];

//define missile turret hardpoints
Missile mTurrets[8];

//define railgun hardpoints
Rail rMounts[8];

Ship.cpp:

//In Global Scope for cleanliness of the code later on
//Class references for weapon hardpoint initialization
Laser laser = Laser();
Missile missile = Missile();
Bomb bomb = Bomb();
Rail rail = Rail();
Heavy heavy = Heavy();

...

//Array initialization functions in case you need to see these

void Ship::initHPoints()
{
    for (i = 0; i <= sLB;i++)
    {
        lBanks[i] = laser;
    }

    for (i = 0; i <= sMT;i++)
    {
        mTurrets[i] = missile;
    }

    for (i = 0; i <= sBH;i++)
    {
        bHolds[i] = bomb;
    }

    for (i = 0; i <= sRM;i++)
    {
        rMounts[i] = rail;
    }

    for (i = 0; i <= sHWB;i++)
    {
        hWBays[i] = heavy;
    }
}

...

void Ship::disableShip(int time)
{
    //Disable shields
    disableShield(time);

    //Disable weapons
    for (i = 0; i <= sLB; i++)
    {
        lBanks[i].toggleWeapon(time); //This is the function that is inaccessible
    }
}

Each of the classes referred to at the top of Ship.cpp are child classes of Weapon which contains the toggleWeapon function. Here is the header file for weapon (includes the child classes).

Weapon.h:

#ifndef WEAPON_H
#define WEAPON_H

#include "range.h"
#include <string>
using namespace std;

class Weapon
{

    /*
    All other weapon types inherit most of their functions and variables from this class.
    Where there are variables and by realtion functions for those variables they will be
    defined within the child classes where these variables and functions are only defined
    within those specific child classes.  If a certain variable/function combination is present
    in more then one child class it should be placed into Weapon to cut down on excess code lines where they are not needed.
    */

public:

    void setWDRange(int dLow, int dHigh, int dOLow, int dOHigh); //set weapon damage range
    void setWAcc(int aLow, int aHigh, int aOLow, int aOHigh); //set weapon accuracy range
    void setWName(string name); //set weapon name
    void setWDType(string dType); //set weapon damage type
    void setWTLevel(int tLevel); //set weapon tech level
    void setWType(int type); //set weapon type
    //void setWASpeed(int aSpeed); //set weapon attack speed

    int getWDRLow(); //get weapon damage range low
    int getWDRHigh(); //get weapon damage range high
    int getWDROLow(); //get weapon damage range optimum low
    int getWDROHigh(); // get weapon damage range optimum high
    int getWALow(); //get weapon accuracy range low
    int getWAHigh(); //get weapon accuracy range high
    int getWAOLow(); //get weapon accuracy range optimum low
    int getWAOHigh(); //get weapon accuracy range optimum high
    int getWTLevel(); //get weapon tech level
    int getWType(); //get weapon damage type
    //int getWASpeed(); //get weapon attack speed

    string getWName(); //get weapon name
    string getWDType(); //get weapon damage type

    void toggleWeapon(int time); //Disable weapon; #Here is the function that is inaccessible
    bool isWDisabled(); //Is this weapon disabled?

private:
    Range   wAcc; //accuracy
    Range   wDRange; //damage range
    string  wDType; //damage type
    string  wName; //name
    int wTLevel; //technology level
    int wType; //weapon type
    //int wASpeed; //weapon attack speed
    bool wStatus; //weapon activity status
    int wDTimer; //weapon disable timer
};


class Laser : Weapon
{
//class stuff
};

class Missile : Weapon
{
//class stuff
};

class Bomb : Weapon
{
//class stuff
};

class Heavy : Weapon
{
//class stuff
};

class Rail : Weapon
{
//class stuff
};  
#endif


/* Other Weapon's Information */

/*

There are several identifiers used above that need explaining.  Some will be covered     multiple times in different files depending on relevency.

Weapon Types:

1: Lasers
2: Missiles
3: Bombs
4: Defenses
5: Heavys
6: Rails

I am not sure if this is a product of how I have set up the arrays in Ship or some other issue that I cannot see at the moment.

Upvotes: 0

Views: 1379

Answers (1)

Alex Z
Alex Z

Reputation: 2590

To expand on the comment by Jesse:

By default,

class Laser : Weapon

...instigates private inheritance of Weapon members, hence causing "inaccessible member errors" when trying to access them outside of the Weapon class itself.

Change it to:

class Laser : public Weapon

Upvotes: 3

Related Questions