web-dev-qa-db-ja.com

エラー:機能にアクセスできません

このエラーが発生していますが、メンバーの保護レベルが高すぎてアクセスできない場合にのみ取得できると考えましたが、とにかく取得しています。

Shopable.h:

#ifndef _SHOPABLE_H_
#define _SHOPABLE_H_

#include "Library.h"

class Shopable{
private:
    std::string Name;
    int Cost;
    std::string Description;
public:
    std::string getName() const{return Name;}
    int getCost() const {return Cost;}
    virtual std::string getDesc() const = 0;
};

#endif

Weapon.h:

#ifndef _WEAPON_H_
#define _WEAPON_H_

#include "Globals.h"
#include "Shopable.h"

class Weapon : Shopable{
private:
    int Damage;
public:
    Weapon(int Cost,int Damage,std::string Name) : Cost(Cost), Damage(Damage), Name(Name){}
    std::string getDesc() const{
        return getName()+"\t"+tostring(Damage)+"\t"+tostring(Cost);
    }
    int Damage(Entity *target){
        int DamageDealt = 0;
        //do damage algorithm things here
        Special();
        return DamageDealt;
    }
};

#endif

正しい関数を含むランダム関数の行には次のものが含まれます。

std::map< std::string, Weapon* > weapons;
Weapon* none = new Weapon(0,0,"None");
weapons[none->getName()] = none;

エラーはgetName()にあります-「Error:function 'Shopable :: getName' is inaccessible」

24
pighead10

公開継承が必要な場合:

 class Weapon : Shopable

する必要があります:

 class Weapon : public Shopable

また、_SHOPABLE_H_は、C++実装用に予約されているため、ユーザー作成のC++コードでは違法です。先頭のアンダースコアを忘れて、SHOPABLE_H

そして:

 Weapon(int Cost,int Damage,std::string Name)

する必要があります:

 Weapon(int Cost,int Damage, const std::string & Name )

文字列をコピーする不必要なオーバーヘッドを避けるため。

命名規則を再考することをお勧めします。通常、C++の関数パラメーター名は小文字で始まります。大文字で始まる名前は、通常、ユーザー定義型(クラス、構造体、列挙など)用に予約されています

興味深いことに、どのC++教科書から学んでいますか?

58

継承はパブリックでなければなりません:

class Weapon : public Shopable
11
Gustav Larsson

プライベート継承を使用しています:

class Weapon : Shopable

したがって、武器が買い物可能品であるという事実は、他のクラスには見えません。パブリック継承に変更します。

class Weapon : public Shopable
11
jon-hanson

classesはデフォルトでプライベート継承に、structsはパブリックに継承されます。 classを使用しているため、「is-a」をモデル化する場合は: public Baseを使用する必要があります。

class Weapon : public Shopable{ // added "public"
5

何も指定しないことで、プライベート継承を取得できます。代わりにこれを試してください

class Weapon : public Shopable{
4
Bo Persson