我定义一个变量adc_cmd[9]
为static const unsigned char
在我的课ADC
在私人。 既然是恒定的,我想我会只定义它的类它的自我里面,但没有明显的工作:
#pragma once
class ADC{
private:
static const unsigned char adc_cmd[9] = { 0x87, 0xC7, 0x97, 0xD7, 0xA7, 0xE7, 0xB7, 0xF7, 0x00 };
//...
};
错误:
error: a brace-enclosed initializer is not allowed here before '{' token
error: invalid in-class initialization of static data member of non-integral type 'const unsigned char [9]'
...
所以,我试图使线路输出的类的具有: static const unsigned char ADC::adc_cmd[9] = { 0x87, 0xC7, 0x97, 0xD7, 0xA7, 0xE7, 0xB7, 0xF7, 0x00 };
,但得到这个错误:
error: 'static' may not be used when defining (as opposed to declaring) a static data member
error: 'const unsigned char ADC::adc_cmd [9]' is not a static member of 'class ADC'
我显然不是在正常声明这一点。 什么是宣布这个正确的方法是什么?
声明它的类体:
class ADC{
private:
static const unsigned char adc_cmd[9];
//...
};
和外侧限定 (并初始化)它(只有一次,作为用于任何外部联动定义):
const unsigned char ADC::adc_cmd[9] = { 0x87, 0xC7, 0x97, 0xD7, 0xA7, 0xE7, 0xB7, 0xF7, 0x00 };
无需编写static
,如由错误消息中指定。
(不要问我为什么在这里的解释static
是被禁止的,我总是发现规则的各种“的限定词重复”完全不合逻辑)
在C ++ 03,静态数据成员的定义去的类定义之外 。
标题:
#pragma once
class ADC {
private:
static unsigned char const adc_cmd[9];
};
在一个 .cpp文件:
#include "headername"
unsigned char const ADC::adc_cmd[9] = { 0x87, 0xC7, 0x97, 0xD7, 0xA7, 0xE7, 0xB7, 0xF7, 0x00 };
将二者结合起来:
class ADC{
private:
static const unsigned char adc_cmd[9];
//...
};
//.cpp
const unsigned char ADC::adc_cmd[9] = { 0x87, 0xC7, 0x97, 0xD7, 0xA7, 0xE7, 0xB7, 0xF7, 0x00 };
只是为了促进利玛窦的答案:
我们必须指出的是, static
预选赛的确是有点在C ++混乱。 据我所知,它做了三件不同的事情取决于它是用在:
- 类成员属性的前面:使得这个属性相同的该类(相同的Java)的所有实例。
- 在全局变量中的前面:减小可变的电流源文件只(同C)的范围。
- 在一个方法/函数内的局部变量的前面:使得这个变量相同的用于向方法/函数的所有调用(同C,可以是用于单例设计模式是有用的)。