在c ++中,如何正确地动态声明和初始化unsigned char数组?

时间:2015-05-24 16:42:03

标签: arrays c++11 initialization

头文件

/*
 * ArrayOfBit.h
 *
 *  Created on: 23 mai 2015
 *      Author: pierre-antoine
 */

#ifndef ARRAYOFBIT_H_
#define ARRAYOFBIT_H_

namespace nsBitVector
{

    typedef unsigned char byte_t;
    typedef unsigned short int UInt16;

    class ArrayOfBit
    {
    private:
        UInt16 m_Size;
        UInt16 m_RealSize;
        byte_t *array = 0; 
        // I initialised the pointer to 0 according to what I've read
        //not letting a pointer non-initialised
    public:
        ArrayOfBit (UInt16 bits);
        ~ArrayOfBit ();
        UInt16 size () const noexcept;
        UInt16 MaxSize () const noexcept;
        UInt16 operator[] (UInt16 index) noexcept;
    };
}
#endif /* ARRAYOFBIT_H_ */

代码

/*
 * ArrayOfBit.cpp
 *
 *  Created on: 23 mai 2015
 *      Author: pierre-antoine
 */

#include "ArrayOfBit.h"

//some macros to go faster.
typedef unsigned short int UInt16;
typedef unsigned char byte_t;

/**
 *
 */
nsBitVector::ArrayOfBit::ArrayOfBit (UInt16 bits) : 
m_Size (bits), m_RealSize ((UInt16) (bits + 7) / 8)
{
    //HERE IS THE LINE WHICH PROVOKES ERROR :
    byte_t *array[] = new byte_t [m_RealSize] {0};
    //m_RealSize is a unsigned short int of the size of the array needed
    //calculated. if need 12 bits, take (12 + 7 = 19 bits / 8 = 2 bytes)
}

nsBitVector::ArrayOfBit::~ArrayOfBit ()
{
    delete[] array;
}

UInt16 nsBitVector::ArrayOfBit::size() const noexcept
{
    return m_Size;
}

UInt16 nsBitVector::ArrayOfBit::MaxSize() const noexcept
{
    return m_RealSize;
}

UInt16 nsBitVector::ArrayOfBit::operator[] (UInt16 index) noexcept
{
    return (UInt16) (*array & ((0b1) << index));
}

这是代码的结尾。

我从中得到3个错误:

1)  ../src/ArrayOfBit.cpp: In constructor 
    ‘nsBitVector::ArrayOfBit::ArrayOfBit(nsBitVector::UInt16)’:
        ../src/ArrayOfBit.cpp:21:49: erreur:
        initializer fails to determine size of ‘array’

为什么会失败? 我无法在其他帖子上获得有关如何使其发挥作用的有效答案。

2)  ../src/ArrayOfBit.cpp:21:49: erreur:
        array must be initialized with a brace-enclosed initializer 

这个我没有得到,因为在零附近有花括号。

3)  ../src/ArrayOfBit.cpp:21:13: attention : 
        unused variable ‘array’ [-Wunused-variable]

这个我也得不到,因为我以后会使用这个数组。

现在,这个类的目标是被包装以进行一些设置,而不是使用3个整数字节来表示3个布尔值。 稍后,我计划将其扩展到我想要的任何大小,比如3位变量字段。

这就是为什么我不使用STL的容器。 问题不是关于功能,而是编译:一旦我可以编译,我将能够开始单元测试

需要说明的是,如果错过了宏行,则byte_t是unsigned char,而UInt16是unsigned short int。

感谢您阅读我的帖子。

我想在计划世界中添加我是新生儿。

0 个答案:

没有答案