#include <iostream>
using namespace std;
class T1
{
const int t = 100;
public:
T1()
{
cout << "T1 constructor: " << t << endl;
}
};
내가 할 때 const 멤버 변수를 초기화하려면 지기위해선 '을 (를) 100. 그러나 다음 날 확증하노라 it& # 39 의 오류:
test.cpp:21: error: ISO C++ forbids initialization of member ‘t’
test.cpp:21: error: making ‘t’ static
Const '가치' 초기화하지 어떻게 해야 합니까?
이 '상수' 서버인지에 변수는 사용할 때마다 상수 값을 수정가능으로 가변입니다 방관하겠나. 지정받습니다 가변입니다 참조되었습니다. 프로그램 실행 도중 가치를 할당되었다는 수정할 수 없습니다.
>. 일반적으로 헤더 파일이 포함되어 있는 클래스 파일과 헤더입니다 일반적으로 많은 번역됨) 로 선언했다. 그러나 복잡한 피하기 위해 링커 규칙, c++컴파일러는 객체당 정의마다 고유해야 합니다. 이 규칙을 줄바꿈할 약간만이라도 경우 메모리에 저장된 객체로 엔티티입니다 c++컴파일러는 동급 정의 필요하다고 했다.
하지만 'a' 는 상수 변수 선언할 클래스 내의 정의할 수 없기 때문이다. Const 가변으로 정의하십시오 위부의 클래스용 필요하다.
T1() : t( 100 ){}
안 = 100 이 경우는 훨씬 전에 클래스용 초기화 목록 '할당에서는 니틸리제이션 발생합니다.
몇 가지 방법으로 const 멤버 인사이드라면 초기화하려면 클래스.
Const 멤버 변수를 초기화하지 정의는 일반적으로 요구사항뿐 너무.
static const int a = 10; //at declaration
class A
{
static const int a; //declaration
};
const int A::a = 10; //defining the static member outside the class
class A
{
const int b;
A(int c) : b(c) {} //const member initialized in initialization list
};
예를 들면 다음과 같습니다.
class Example{
const int x;
public:
Example(int n);
};
Example::Example(int n):x(n){
}
여러 개의 데이터 멤버의 경우 '상수' 의 멤버 초기화하려면 클래스용 다음 구문을 사용할 수 있습니다.
Example::Example(int n, int z):x(n),someOtherConstVariable(z){}
만약 한 멤버가 될 것이라고 비해 조금 복잡한 는 어레이입니다 정상 입니다.
class C
{
static const int ARRAY[10];
public:
C() {}
};
const unsigned int C::ARRAY[10] = {0,1,2,3,4,5,6,7,8,9};
또는
int* a = new int[N];
// fill a
class C {
const std::vector<int> v;
public:
C():v(a, a+N) {}
};
이것이 옳은 방법으로 할 수 있습니다. (이 코드.
#include <iostream>
using namespace std;
class T1 {
const int t;
public:
T1():t(100) {
cout << "T1 constructor: " << t << endl;
}
};
int main() {
T1 obj;
return 0;
}
그런 다음 사용할 경우 아래 '또는' C++10 컴파일러와의 초기화하지 못할 때 단점 멤버 선언. 이제 할 수 있는 것은 const 데이터 멤버를 구성자를 초기화 합니다. 또한 니시알이저 목록 ' (100)' 을 사용하도록 합니다 T1 () t 프레젠테이션이든 메모리 (한다.