方法是无法访问
问题描述:
我上一场比赛工作的时刻,我遇到的那一刻一个小问题。这是没有惊天动地,但我需要找出如何解决它最终使我想我会撬从心头好一些的信息在这里,而我继续推敲出我的比赛的外壳。方法是无法访问
反正是怎么回事的是,在某些特定类别的功能被错误内衬(MSVS2010)为无法访问。有关的功能在公共范围内。函数调用的方式是通过封装这些函数的对象的数组。我现在正在使用一个数组来代替矢量,因为我仍然在学习如果我可以使用矢量来处理我正在做的事情。
我现在张贴的特定代码领域,但请意识到这是较早则alpha代码,所以有可能是存在的突出问题,在关于什么,我试图做结构的或实际的语法;修复这类问题并不是我对这个问题的目标,所以如果你能够看清它,除非是问题的原因,否则我将不胜感激。
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
}
}
每个在Ship.cpp顶部所指的类是武器含有toggleWeapon功能的子类。这里是武器头文件(包括子类)。
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
我不知道这是如何我已经建立了船舶阵列或者说我不能在此刻看到一些其他问题的产物。
答
要由杰西在注释扩大:
默认情况下,
class Laser : Weapon
...教唆私人继承Weapon
成员,因此试图访问他们时,造成“不可访问成员的错误”在Weapon
类之外。
将其更改为:
class Laser : public Weapon
你一定要附上你得到了确切的错误消息。 – 2012-04-13 05:09:09
您使用私人继承'class Laser:Weapon'。尝试使它成为'阶级激光:公共武器'。 – 2012-04-13 05:10:53
@MichaelDaum错误是错误:函数“武器:: toggelWeapon”无法访问。杰西虽然正确的,我忘了使用公有继承d: – Geowil 2012-04-13 05:15:54