#c #class #static #constants #private
Вопрос:
В моем классе среды у меня есть частная статическая переменная-член:
class Environment {
public:
Environment(double air_density, Color background_color);
void create_new(const Part amp;object);
double get_air_density() const noexcept;
void set_air_density() noexcept;
Color get_background_color() const noexcept;
void set_background_color() noexcept;
std::vector<Part> get_objects() const noexcept;
void set_objects() noexcept;
private:
std::vector<Part> objects;
Color background_color;
//ERROR:
static constexpr Color default_background_color = Color({ 210, 210, 210 });
};
И в основном я пытаюсь получить доступ к этой переменной:
int main() {
Environment environment(0.1, Environment::default_background_color); // ERROR: 'member "Environment::default_background_color" is inaccessible'
Part part(10, 10, 50, 50, false, 0, true);
environment.create_new(part);
while (running) {
part.update_position(0.1);
background(141, 3, 255);
part.draw();
render(dc);
}
}
Итак, мой вопрос в том, что не так и как мне создать статическую переменную const, к которой я могу получить доступ за пределами класса среды?
Комментарии:
1. Сделай это
public
. Если вы хотите, чтобы он был доступен только для целей предоставления конструктору значения по умолчанию, напишите конструктор, который принимает одинdouble
аргумент в качестве аргумента, а затем используетdefault_background_color
для делегирования конструктору с двумя аргументами.2. Я не вижу статической переменной
Ответ №1:
Ваш элемент данных объявлен private
(и static
, кстати, НЕТ), поэтому он просто недоступен для любого кода за пределами класса.
Если вы хотите main()
получить доступ к участнику, либо:
- объявите участника как
public
(иstatic
):
class Environment {
public:
Environment(double air_density, Color background_color);
...
static constexpr Color default_background_color = Color({ 210, 210, 210 });
...
};
int main() {
Environment environment(0.1, Environment::default_background_color); // OK
...
}
- объявить
main()
какfriend
класс:
class Environment {
public:
Environment(double air_density, Color background_color);
...
private:
...
static constexpr Color default_background_color = Color({ 210, 210, 210 });
friend int main();
};
int main() {
Environment environment(0.1, Environment::default_background_color); // OK
...
}