2012-04-13 20 views
0

私は現時点でゲームに取り組んでおり、現時点では小さな問題にぶつかっています。それは何も地球が壊れているわけではありませんが、私は最終的にそれを修正する方法を理解する必要があるので、私は私のゲームのシェルを打ち破っている間、私はここで良い心からいくつかの情報を詮索するだろうと思った。メソッドにアクセスできない

とにかく、特定のクラスの関数にアクセスできないエラーがあります(MSVS2010)。問題の機能は公開されています。関数呼び出しの実行方法は、これらの関数がカプセル化されたオブジェクトの配列を使用する方法です。私は私がやっていることに対してベクトルを使うことができるかどうかまだ分かっているので、私はベクトルの代わりに配列を使っています。

ここで特定のコード領域を投稿しますが、これはアルファコードが早いことを認識してください。そうすれば、私がしようとしているものに関して構造や実際の構文に目立った問題が生じる可能性があります。この種のものを修正することはこの質問のための私の目標ではないので、あなたが問題を引き起こしているものでなければそれを見渡すことができれば感謝します。

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 

私はこれは私が船や私は、現時点では見ることができない他のいくつかの問題で配列を設定しているかの製品であるかどうかわからないです。ジェシーによってコメントに拡大すること

+0

あなたは間違いなくあなたが得た正確なエラーメッセージを添付しなければなりません。 –

+3

あなたのプライベート継承 'class Laser:Weapon'を使用しています。それを 'class Laser:public Weapon'としてみてください。 –

+0

@MichaelDaumエラーはエラーです:function "Weapon :: toggelWeapon"にアクセスできません。 Jesseは正しかった、私は公有地を使用するのを忘れていたD: – Geowil

答えて

3

:デフォルトでは、

class Laser : Weapon 

を...は、それらにアクセスしようとするので、「アクセスできないメンバーのエラー」を引き起こし、Weaponメンバーのプライベート継承を扇動しますWeaponクラスの外部にあります。

変更それがに:

class Laser : public Weapon 
関連する問題