这太神奇了,我正在用C++编写一个像素操作库。所以我想有一个充满色彩预设的类。Color是一个具有如下结构的类:
Color(int r, int g, int b, int a)
如果我在任何类之外声明它为:
static const Color COL_BLACK = Color(0, 0, 0, 255);
这表明Visual Studio代码中没有错误。但是,当我这样构建时:
class Colors {
public:
static const Color Black = Color(0, 0, 0, 255);
};
等号下面有一条红色的歪歪扭扭的线,但当我把鼠标悬停在上面时,它不会告诉我出了什么问题。怎么了?
注意,我希望它被这样调用:
Color newCol = Colors::Black;
由于C++17,您可以简单地使用inline
,如下所示:
#include <iostream>
class Color
{
public:
Color(int r, int g, int b, int a)
:
r{ r },
g{ g },
b{ b },
a{ a }
{
}
int r, g, b, a;
};
class Colors
{
public:
inline static const Color Black = Color(0, 0, 0, 255);
};
int main()
{
Color c = Colors::Black;
std::cout << c.r << "," << c.g << "," << c.b << "," << c.a << "n";
}
阅读一些关于静态初始化的内容。同时,在这种情况下,您可以用constexpr
ctor定义Color
,如下所示:
struct Color
{
const unsigned int r;
const unsigned int g;
const unsigned int b;
const unsigned int a;
constexpr Color( const unsigned int r, const unsigned int g, const unsigned int b, const unsigned int a ) : r(r), g(g), b(b), a(a)
{}
};
然后你可以像这样初始化Colors
:
class Colors
{
public:
static constexpr Color Black = Color(0, 0, 0, 255);
};