Объявление нестатического константного массива в качестве члена класса - PullRequest
1 голос
/ 05 октября 2009

Как мы можем объявить нестатический константный массив в качестве атрибута класса?

Следующий код приводит к ошибке компиляции

'Test :: x': элемент не может быть инициализирован

class Test
{
public:
    const int x[10];

public:
    Test()
    {
    }
};

Ответы [ 3 ]

3 голосов
/ 05 октября 2009

Вы должны прочитать этот уже опубликованный вопрос . Так как невозможно сделать то, что вы хотите, обходной путь - использовать std :: vector.

1 голос
/ 05 октября 2009

Вы можете использовать array класс из tr1.

class Test
{
public:
 const array<int, 10> x;

public:
 Test(array<int,10> val) : x(val) // the only place to initialize x since it is const
 {
 }
};

array класс может быть упрощенно представлен следующим образом:

template<typename T, int S>
class array
{
    T ar[S];
public:
    // constructors and operators
};
0 голосов
/ 05 октября 2009

Используя boost :: array (так же, как tr1), он будет выглядеть так:

    #include<boost/array.hpp>

    class Test
    {   
       public:

        Test():constArray(staticConst) {}; 
        Test( boost::array<int,4> const& copyThisArray):constArray(copyThisArray) {}; 

        static const boost::array<int,4> staticConst; 

        const boost::array<int,4> constArray;
    };

    const boost::array<int,4> Test::staticConst = { { 1, 2, 3 ,5 } };

Необходим дополнительный статический член кода, поскольку { { 1, 2, 3 ,5 } } недопустим в списке инициализации.

Некоторым преимуществом является то, что boost :: array имеет определенные итераторы и стандартные методы контейнера, такие как size, begin и end.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...