我创建了一个类,其中有一些静态成员。
我用Google搜索"如何初始化静态成员",并且我了解到我应该在类外部初始化静态成员。
但是,我在初始化静态成员时遇到了重新声明错误。
我做错了什么?
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
using namespace std;
class Color
{
public:
int r,g,b;
Color();
Color(int r_,int g_,int b_)
{
r=r_;
g=g_;
b=g_;
}
static Color Red;
};
int main()
{
Color Color::Red=Color(255,0,0);
return 0;
}
答案 0 :(得分:3)
尝试将其移出main()
。
...
Color Color::Red = Color(255, 0, 0);
int main()
{
...
答案 1 :(得分:2)
您应该像这样初始化您的静态成员。
class class_name {
static int i;
};
int class_name::i = 0;
这是必需的,因为你的类只能有一个i实例。 但是对于常量变量,您可以直接在您的班级中执行此操作。
class class_name {
static int i;
const static int j = 20;
};
修改强>: 该标准的第6.7节有这样的说法:
使用静态存储的所有本地对象的零初始化 持续时间在任何其他初始化发生之前执行。一个 具有静态存储持续时间的POD类型的本地对象 在第一次输入块之前初始化常量表达式。 允许实现执行早期初始化 其他具有静态存储持续时间的本地对象 静态允许实现的条件 在命名空间范围内使用静态存储持续时间初始化对象。 否则,在第一次控制通过时初始化这样的对象 通过宣言;这样的对象被认为是初始化的 完成初始化。如果初始化退出 抛出异常,初始化不完整,所以会 下次控制进入声明时再试一次。如果 控件在对象出现时重新输入声明(递归) 在被初始化时,行为是不确定的。