2012-11-16 110 views
0

我想用名稱爲「a」的const int變量創建類Test。之後,我需要創建構造函數,其中變量「a」的值爲10。我創建一流的試驗和test.h我在課堂上Test.h創建const int a;和TEST.CPP我有類似的東西:C++並初始化常量變量

#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

我敢肯定,搜索*構造基礎/成員初始化列表*在谷歌將拉動一些好成績。 – 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]; 

不會做你希望它是什麼。也許你的意思是

tekst = new char[size]; 
+3

初始化列表應該用於* everything *,而不僅僅用於那些你絕對必須的情況下......並且'tekst'的本地聲明完全關閉。 –

1

你必須這樣做在初始化列表:

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

a是常量,所以你不能分配給它。但是,您必須對其進行初始化。

做:

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

順便說一句,在tekst[size]沒有做什麼,你想,大概。它什麼也沒做!

+0

它*可能*什麼也不做。它*可能會做些什麼。從技術上講,它的行爲是不確定的。 –