2012-11-16 105 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

它*可能*什么也不做。它*可能会做些什么。从技术上讲,它的行为是不确定的。 –