类里面不能有自己类型的常量?

问题描述

我的意思是,有可能以某种方式做这样的事情吗?

class Color {
public:
    static constexpr Color BLACK = {0,0};

    constexpr Color(int r,int g,int b) : r_(r),g_(g),b_(b) {}

private:
    int r_;
    int g_;
    int b_;
};

编译器抱怨类 Color 在定义 BLACK 常量时不完整。

解决方法

您可以将定义移到外面:

class Color {
public:
    static const Color BLACK;

    constexpr Color(int r,int g,int b) : r_(r),g_(g),b_(b) {}

private:
    int r_;
    int g_;
    int b_;
};
constexpr Color Color::BLACK = {0,0};

Demo

,

或者,您可以将静态变量更改为函数调用:

class Color {
public:
    static constexpr Color BLACK() { return {0,0}; }

    constexpr Color(int r,b_(b) {}

private:
    int r_;
    int g_;
    int b_;
};