2013-05-12 42 views
1

我想知道如何在我的函數中返回一個2d數組。我的代碼是這樣的:如何在我的函數中返回2d數組?

int[][] function() 
{ 
    int chessBoard[x][x]; 
    memset(chessBoard,0,x*x*sizeof(int)); 
    return chessBoard;  
} 

我得到錯誤信息:「錯誤:意外不合格-ID之前‘[’令牌」我的第一道防線。關於如何讓我的功能正常工作的任何提示?

+0

你有一個更大的問題:你的二維數組是在棧內存中分配。你不想返回(指向)(你應該複製它或使用堆內存或封裝它)。相關:http://stackoverflow.com/questions/8617683/return-a-2d-array-from-a-function – 2013-05-12 12:31:54

+0

@Joe一個'int **'不會在這裏工作,沒有其他更改,因爲它不是佈局與2D陣列兼容。 – 2013-05-12 12:33:50

+0

@sftrabbit謝謝。我只是刪除了我評論的那部分內容,因爲我沒有把注意力集中在這個問題上。 – 2013-05-12 12:40:38

回答

1

使用矢量的載體來代替:

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; 
} 
0

不幸的是,陣列不能從函數返回。標準清楚地說明了這一點。

C++11 Standard § 8.3.5 Functions

Functions shall not have a return type of type array or function, although they may have a return type of type pointer or reference to such things.

但現代C++實踐建議您使用STL容器來促進混淆語法和內存分配。在特定的設置,我們可以用一個std::vector取代你的C風格的數組:

std::vector< std::vector<int> > function() 
{ 
    return std::vector< std::vector<int> >(x, std::vector<int>(x)); 
}