I持って、次の抽象クラス抽象クラスのメンバは、派生クラスで設定された値にアクセスすることはできません
class Language {
const std::string name ;
protected:
std::string cmd, home ;
Config::Section cfg ;
bool load_conf() {
home = env("HOME") ;
// DEBUG
std::cout << home << std::endl ;
std::cout << name << std::endl ;
if (!cfg.load(home + "/.cr", name)) {
std::cerr << "cr: No configuration found for this language." << std::endl ;
return false ;
}
return true ;
}
public:
virtual bool handles(const std::string) = 0 ;
virtual int run(std::string) = 0 ;
} ;
し、それを
class Python : public Language {
const std::string name ;
public:
Python() : name("python") {}
bool handles(const std::string) ;
int run(std::string) ;
};
問題を実装して、このような派生クラス、数私が持っているのはname
が空であると報告されたにあります。これは設定がうまくいてもエラーを吐き出します。 load_conf()
は、それぞれの派生クラスによって実装されるrun()
から呼び出されます。
私はname
を保護し公開しようとしましたが、どちらも違いはありません。理想的には、抽象クラス(保護されている)にname
を宣言したいだけで、派生クラスごとに宣言を繰り返す必要はありませんが、コンパイルはしません。私もthis->name
を使ってみましたが、それも空です。そして、const
も削除しても差はありません。
私はそれがスコープの問題だと感じていますが、私は何が欠けていますか?
ありがとう、完璧です –