Объявление функции, которая возвращает двумерный массив в заголовочном файле? - PullRequest
1 голос
/ 09 января 2011

Я пытаюсь объявить в моем заголовочном файле функцию, которая возвращает двумерный массив. Как это можно сделать, учитывая, что мы уже знаем размер массива? Вот что я сейчас делаю.

class Sample
{
public:
    char[x][y] getArr();
    void blah(int x, int y);
private:
    const static int x = 8;
    const static int y = 2;
    char arr[x][y];
};

Ответы [ 5 ]

7 голосов
/ 09 января 2011

Я думаю, вы должны использовать typedef.

    typedef char TArray[2][2];
    TArray& getArr();
5 голосов
/ 09 января 2011

Массивы не являются первоклассными гражданами в C ++.Пожалуйста, используйте boost::array (или std::array в C ++ 0x).Он будет вести себя намного лучше, чем вы хотите, чтобы он вел себя.

4 голосов
/ 09 января 2011

В C ++ сам массив не может быть возвращен из функции напрямую. Кроме того, вы можете вернуть ссылку на массив или указатель на массив. Итак, вы можете написать как:

char (&getArr())[x][y] { return arr; }

или

char (*getArr())[x][y] { return &arr; }

Надеюсь, это поможет.

0 голосов
/ 09 января 2011

Да, указатель на указатель - это путь. Это действительно трудно думать. Я рекомендую вам сделать карту памяти на листе бумаги, чтобы понять концепцию. Когда я брал уроки C ++, я решил, что мне нужна функциональность, как вы и предлагаете, через много времени я нарисовал карту всей необходимой памяти, и до меня дошло, что я смотрю на указатель на указатель. Это взорвало меня.

0 голосов
/ 09 января 2011

Оказывается, мой первоначальный ответ был совершенно неверным, но Я не могу удалить его, так как он был принят .Из двух отдельных ответов , приведенных ниже, я смог скомпилировать это:

class Sample
{
    const static int x = 8;
    const static int y = 2;
public:
    typedef char SampleArray[x][y];

    SampleArray& getArr();
    void blah(int x, int y);

private:
    SampleArray arr;
};

Sample::SampleArray& Sample::getArr ()
{
    return arr;
}

(я скомпилировал свое первоначальное решение только с помощью данного объявления класса OP,определение getArr().)

Просто верните указатель на указатель.

char** getArr();

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