声明一个在头文件中返回2D数组的函数?

时间:2011-01-08 21:06:50

标签: c++ arrays declaration header-files

我试图在我的头文件中声明一个返回2D数组的函数。考虑到我们已经知道阵列的大小,怎么能实现呢?以下是我目前正在做的事情。

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 个答案:

答案 0 :(得分:7)

我认为你应该使用typedef。

    typedef char TArray[2][2];
    TArray& getArr();

答案 1 :(得分:5)

数组不是C ++中的一等公民。请改用boost::array(或C ++ 0x中的std::array)。它会表现得更像你希望它表现出来。

答案 2 :(得分:4)

在C ++中,数组本身不能直接从函数返回。 或者,您可以返回对数组的引用或指向数组的指针。 所以,你可以写成:

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

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

希望这有帮助。

答案 3 :(得分:-1)

是的,指向指针的指针是要走的路。这真的很难想。我建议你在一张纸上做一个记忆地图,只是为了理解这个概念。当我参加C ++课程时,我决定我想要的功能就像你建议的那样,经过很长一段时间,我画了一张我需要的所有内存的地图,我突然意识到我正在寻找一个指向指针的指针。这让我感到震惊。

答案 4 :(得分:-2)

事实证明我的原始答案完全错误,但是I can't delete it since it's been accepted。从下面的two单独answers开始,我就可以编译:

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();