문제

나는 수업이 있고 값이 0,1,3,7,15 인 비트 마스크를 원합니다.

그래서 본질적으로 나는 다음과 같은 상수 int 배열을 선언하고 싶습니다.

class A{

const int masks[] = {0,1,3,5,7,....}

}

그러나 컴파일러는 항상 불평합니다.

나는 시도했다 :

static const int masks[] = {0,1...}

static const int masks[9]; // then initializing inside the constructor

이것이 어떻게 할 수 있는지에 대한 아이디어가 있습니까?

감사!

도움이 되었습니까?

해결책

class A {
    static const int masks[];
};

const int A::masks[] = { 1, 2, 3, 4, ... };

클래스 정의 내에서 배열을 고정하고 싶을 수도 있지만 필요하지 않습니다. 배열은 이니셜 라이저에서 크기를 추론 할 수있는 정의 지점 (헤더가 아닌 .CPP 파일 내에 유지)에 완전한 유형을 갖습니다.

다른 팁

// in the .h file
class A {
  static int const masks[];
};

// in the .cpp file
int const A::masks[] = {0,1,3,5,7};
enum Masks {A=0,B=1,c=3,d=5,e=7};
  1. 생성자 또는 기타 방법에서만 변수를 초기화 할 수 있습니다.
  2. '정적'변수는 클래스 정의에서 초기화되어야합니다.

당신은 이것을 할 수 있습니다 :

class A {
    static const int masks[];
};

const int A::masks[] = { 1, 2, 3, 4, .... };

글쎄, 이것은 방법을 호출하지 않고 개인 구성원을 초기화 할 수 없기 때문입니다. 나는 항상 사용합니다 회원 초기화 목록 Const 및 정적 데이터 구성원을 위해 그렇게합니다.

당신이 무엇을 모른다면 멤버 이니셜 라이저 목록 그들은 당신이 원하는 것입니다.

이 코드를보십시오.

    class foo
{
int const b[2];
int a;

foo():    b{2,3}, a(5) //initializes Data Member
{
//Other Code
}

}

또한 GCC에는이 멋진 확장 기능이 있습니다.

const int a[] = { [0] = 1, [5] = 5 }; //  initializes element 0 to 1, and element 5 to 5. Every other elements to 0.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top