首页 > 解决方案 > 私有静态 Consexpr 成员变量在 Main 中不可访问?

问题描述

在我的环境类中,我有一个私有静态成员变量:

class Environment {
public:
    Environment(double air_density, Color background_color);

    void create_new(const Part &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);
    }
}

所以我的问题是,出了什么问题,如何制作一个可以在 Environment 类之外访问的 const 静态变量?

标签: c++classstaticconstantsprivate

解决方案


您的数据成员已声明private(而不是static,顺便说一句),因此类外的任何代码都无法访问它。

如果您想main()访问该成员,请执行以下任一操作:

  • 将成员声明为public(and 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
    ...
}

在线演示


推荐阅读