2012-11-16 5 views
0

이름이 "a"인 const int 변수를 사용하여 클래스 Test를 만들고 싶습니다. 그 후 변수 "a"가 값 = 10을 얻는 생성자를 생성해야합니다. I 클래스 테스트를 만들고 test.h 내가 수업 Test.h에 const int a;을 만들고 Test.cpp에 내가 그런 일이 :C++ 및 const 변수 초기화

#include "stdafx.h" 
#include "Test.h" 


Test::Test(void) 
{ 
    a = 10; 
    b = 20; 
    size = 20; 
    tekst[size]; 
    } 

Test::~Test(void) 
{ 
} 

을하고이 test.h입니다 :

#pragma once 
class Test 
{ 

    const int a; 



public: 
    Test(void); 
    ~Test(void); 
    int b; 
    char *tekst; 
    int size; 
    static double d; 
    int y; 
}; 

하지만, 나는 오류 :

Error 1 error C2758: 'Test::a' : must be initialized in constructor base/member initializer list c:\users\bożydar\documents\visual studio 2012\projects\consoleapplication1\consoleapplication1\test.cpp 6 
Error 2 error C2166: l-value specifies const object c:\users\bożydar\documents\visual studio 2012\projects\consoleapplication1\consoleapplication1\test.cpp 7 
+2

Google에서 * constructor base/member initializer list *를 검색하면 좋은 결과를 얻을 수 있습니다. – chris

답변

7

오류가 모든 것을 말해, a must be initialized in constructor base/member initializer list

Test::Test(void) : a(10) // Initializer list 
{ 
... 
} 
3

오류가

Test::Test(void) : a(10) // an initializer list 
{ 
    b = 20; 
    size = 20; 
    tekst[size]; 
} 

이 BTW 난 당신이 코드

tekst[size]; 

당신이 그것을에 기대하지 않는 것을 발견 거라 생각 무엇을 알려줍니다.

Test::Test(void) : a(10) { 
    ... 
} 
+3

절대적으로 필요한 경우에만 이니셜 라이저 목록을 * everything *에 사용해야합니다 ... 그리고 'tekst'의 로컬 선언은 완전히 해제되어 있습니다. –

1

을 의미한다. 그러나 초기화해야합니다.

는 수행

Test::Test(void) 
:a(10) 
{ 
    ... 
} 

BTW의 tekst[size] 아마, 당신이 생각하지 않습니다. 아무것도하지 않는다!

0

a는 const를, 그래서 당신은 그것에 할당 할 수 없습니다 : 아마 당신은 당신은 초기화 목록에서 할 필요가

tekst = new char[size]; 
+0

* 아무것도하지 않을 수도 있습니다. 뭔가 할 수도 있습니다. 기술적으로 그 동작은 정의되지 않았습니다. –