0

我目前正在开发一款游戏,目前遇到了一个小问题。这不是什么惊天动地的事情,但我最终需要弄清楚如何解决它,所以我想我会在继续敲定我的游戏外壳的同时从这里的好心人那里窥探一些信息。

无论如何,正在发生的事情是某些特定类中的函数被错误排列(MSVS2010)为无法访问。有问题的功能在公共范围内。完成函数调用的方式是通过封装了这些函数的对象数组。我现在使用数组而不是向量,因为我仍在学习是否可以将向量用于我正在做的事情。

我现在将发布特定的代码区域,但请意识到这比 alpha 代码更早,因此对于我正在尝试做的事情,结构或实际语法可能存在明显问题;解决这种问题不是我对这个问题的目标,所以如果你能仔细查看它,我将不胜感激,除非它是导致问题的原因。

船舶.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];

船舶.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 顶部引用的每个类都是 Weapon 的子类,其中包含 toggleWeapon 函数。这是武器的头文件(包括子类)。

武器.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

我不确定这是否是我在 Ship 中设置阵列的方式的产物,还是我目前看不到的其他问题。

4

1 回答 1

3

要扩展 Jesse 的评论:

默认情况下,

class Laser : Weapon

...引发成员的私有继承Weapon,因此在尝试在Weapon类本身之外访问它们时导致“不可访问的成员错误”。

将其更改为:

class Laser : public Weapon
于 2012-04-13T05:27:51.573 回答