我想知道如何在我的函数中返回一个二维数组。我的代码是这样的:
int[][] function ()
{
int chessBoard[x][x];
memset(chessBoard,0,x*x*sizeof(int));
return chessBoard;
}
我在第一行收到错误消息:“错误:'[' token”之前的意外不合格 ID。关于如何让我的功能正常工作的任何提示?
我想知道如何在我的函数中返回一个二维数组。我的代码是这样的:
int[][] function ()
{
int chessBoard[x][x];
memset(chessBoard,0,x*x*sizeof(int));
return chessBoard;
}
我在第一行收到错误消息:“错误:'[' token”之前的意外不合格 ID。关于如何让我的功能正常工作的任何提示?
改用向量的向量:
template<typename T, size_t N>
std::vector<std::vector<T> > func()
{
std::vector<std::vector<T>> data(N, std::vector<T>(N));
return data;
}
int main ( int argc, char ** argv)
{
std::vector<std::vector<int> > f = func<int, 10>();
return 0;
}
如果您使用的是 C++11,则可以尝试使用std::array:
template<typename T, size_t N>
std::array<std::array<T, N>, N> func()
{
return std::array<std::array<T, N>, N>();
}
int main ( int argc, char ** argv)
{
auto f = func<int, 10>();
return 0;
}
不幸的是,数组不能从函数返回。标准中有明确规定。
C++11 标准§ 8.3.5 函数
函数不应具有类型数组或函数的返回类型,尽管它们可能具有类型指针或对此类事物的引用的返回类型。
但现代 C++ 实践建议您使用 STL 容器来简化令人困惑的语法和内存分配。在您的特定设置中,我们可以将您的 C 样式数组替换为std::vector
:
std::vector< std::vector<int> > function()
{
return std::vector< std::vector<int> >(x, std::vector<int>(x));
}