Возвращение ссылочного массива из функции-члена const - PullRequest
3 голосов
/ 16 сентября 2010

Как вернуть ссылку на массив из функции-члена const?

class State{
    Chips (&arr() const)[6][7] { return arr_; }
    Chips val() const { return val_; }
}

Неправильная инициализация ссылки типа 'Chips (&) [6] [7]' из выражения типа 'const Chips [6] [7]'

Спасибо.

Ответы [ 2 ]

7 голосов
/ 16 сентября 2010

Вы правильно поняли синтаксис, но если arr_ является непосредственным членом класса (и, вероятно, так оно и есть), то вы просто не сможете вернуть неоплачиваемую ссылку на этого члена. Внутри описанного выше метода arr член arr_ имеет тип const Chips[6][7]. Вы не можете использовать этот тип для инициализации ссылки типа Chops (&)[6][7], так как это нарушит правильность const. Чтобы скомпилировать вышесказанное, вам потребуется const для возвращенной ссылки, а также

...
const Chips (&arr() const)[6][7] { return arr_; }
...

Но в любом случае вам будет гораздо лучше с typedef

...
typedef Chips Chips67[6][7];
const Chips67 &arr() const { return arr_; }
...
0 голосов
/ 16 сентября 2010

Вы должны указать функцию как возвращающую указатель Chips.Итак,

Chips* arr() const;

- это то, что вы ищете.

...