试图在一个类定义的静态常量变量(Trying to define a static constant

2019-09-16 08:23发布

我定义一个变量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'

我显然不是在正常声明这一点。 什么是宣布这个正确的方法是什么?

Answer 1:

声明它的类体:

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是被禁止的,我总是发现规则的各种“的限定词重复”完全不合逻辑)



Answer 2:

在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 };


Answer 3:

将二者结合起来:

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 };


Answer 4:

只是为了促进利玛窦的答案:

我们必须指出的是, static预选赛的确是有点在C ++混乱。 据我所知,它做了三件不同的事情取决于它是用在:

  1. 类成员属性的前面:使得这个属性相同的该类(相同的Java)的所有实例。
  2. 在全局变量中的前面:减小可变的电流源文件只(同C)的范围。
  3. 在一个方法/函数内的局部变量的前面:使得这个变量相同的用于向方法/函数的所有调用(同C,可以是用于单例设计模式是有用的)。


文章来源: Trying to define a static constant variable in a class
标签: c++ class static