У меня есть следующий абстрактный класс
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) ;
};
Проблема, с которой я столкнулся, заключается в load_conf()
где по какой-то причине name
считается пустым, что выдает ошибку, даже если конфигурация в порядке.load_conf()
вызывается из run()
, который реализуется каждым производным классом.
Я пытался сделать name
защищенным и общедоступным, но ни один из них, похоже, не имеет никакого значения.В идеале я хотел бы объявить name
только в абстрактном классе (как защищенный) и не должен повторять объявление в каждом производном классе, но когда я пытаюсь это сделать, он не скомпилируется.Я также пытался использовать this->name
, но он также пуст, и удаление const
также не имеет значения.
У меня такое ощущение, что это проблема с областью видимости, но чего мне не хватает?