0

我想使用名称为“a”的 const int 变量创建类 Test。之后,我需要创建构造函数,其中变量“a”的值 = 10。我创建类 test 并在 test.h 中创建const int a;类 Test.h 和 test.cpp 我有类似的东西:

#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
4

4 回答 4

7

错误说明了一切,a must be initialized in constructor base/member initializer list

Test::Test(void) : a(10) // Initializer list
{
...
}
于 2012-11-16T14:34:04.090 回答
3

错误告诉你该怎么做

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

顺便说一句,我想你会发现代码

tekst[size];

不符合您的预期。大概你的意思

tekst = new char[size];
于 2012-11-16T14:34:11.007 回答
1

您必须在初始化列表中执行此操作:

Test::Test(void) : a(10) {
  ...
}
于 2012-11-16T14:35:14.437 回答
0

a是 const,所以你不能分配给它。但是,您必须对其进行初始化。

做:

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

顺便说一句,tekst[size]可能不会像你想的那样做。它什么也不做!

于 2012-11-16T14:35:31.397 回答