我试图在我的头文件中声明一个返回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];
};
答案 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();