Ich arbeite gerade an einem Spiel und stoße momentan auf ein kleines Problem. Es ist nichts, was die Welt erschüttert, aber ich werde herausfinden müssen, wie ich es schließlich beheben kann, also dachte ich, ich würde hier ein paar Infos von den guten Köpfen hacken, während ich weiterhin die Hülle meines Spiels aushämmere.Methode ist nicht zugänglich
Wie auch immer, was ist los, dass die Funktionen in einigen bestimmten Klassen Fehler ausgekleidet sind (MSVS2010) als unzugänglich. Die fraglichen Funktionen sind öffentlich. Der Funktionsaufruf erfolgt über ein Array des Objekts, in dem diese Funktionen gekapselt sind. Ich benutze ein Array für jetzt anstelle von Vektor, weil ich immer noch lerne, wenn ich Vektoren für das, was ich mache, verwenden kann.
Ich poste jetzt die spezifischen Code-Bereiche, aber bitte merkt, dass dies früher als der Alpha-Code ist, also kann es eklatante Probleme mit der Struktur oder der tatsächlichen Syntax in Bezug darauf geben, was ich zu tun versuche; diese Art von Sachen zu reparieren ist nicht mein Ziel für diese Frage, also würde ich es schätzen, wenn Sie es überblicken könnten, es sei denn, es ist, was das Problem verursacht.
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
}
}
Jede der genannten Klassen an der Spitze des Ship.cpp sind Kinderklassen Waffe, die die toggleWeapon Funktion enthält. Hier ist die Header-Datei für Waffe (enthält die untergeordneten Klassen).
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
Ich bin nicht sicher, ob dies ist ein Produkt, wie ich die Arrays in Schiff oder ein anderes Thema einrichten, die ich zur Zeit nicht sehen kann.
sollten Sie legen auf jeden Fall die genauen Fehlermeldungen Sie. –
Sie verwenden private Vererbung 'class Laser: Weapon'. Versuchen Sie, es zu "Klasse Laser: öffentliche Waffe" zu machen. –
@MichaelDaum Der Fehler war Fehler: Funktion "Weapon :: toggelWeapon" ist nicht zugänglich. Jesse hatte jedoch recht, ich habe vergessen, öffentliche Vererbung zu verwenden D: – Geowil