[英]C++ Return value type does not match the function type
我試圖返回一個矩陣,並且在方法中給了我錯誤:返回值類型與函數類型不匹配。
這是矩陣:
float obstaculos[20][4];
方法如下:
float** getObstaculos() {
return obstaculos;
}
您知道可能是什么問題嗎?
float obstaculos[20][4];
…是一個float
值數組的數組。 由於sizeof
要求,它是內存中連續的float
值序列。
float**
…是指向float
的指針。 float
值的單個序列( obstaculos
矩陣)自然可以轉換為直接指針(即指向第一項),但是該內存中沒有存儲可以獲取指向該指針的指針的指針。
因此,一種可能性是
using Row = float[4];
Row obstaculos[20];
Row* getObstaculos() {
return obstaculos;
}
但是最好定義一個矩陣,例如
#include <array>
using Row = std::array<float, 4>;
using Matrix = std::array<Row, 20>;
Matrix obstaculos;
Matrix* getObstaculos() {
return &obstaculos;
}
如果您確實需要一個指針數組,那么您可能希望使矩陣最初是該形式的。
修訂:如果需要,這是一種計算指向行的指針的數組的方法:
using Row_data_pointers = std::array<float*, std::tuple_size<Matrix>::value>;
auto data_pointers( Matrix& m )
-> Row_data_pointers
{
Row_data_pointers result;
for( int i = 0; i < int( std::tuple_size<Row_data_pointers>::value ); ++i )
{
result[i] = &m[i][0];
}
return result;
}
盡管float*
和float[N]
是相似的類型(它們可以類似的方式使用,並且第一個可以從第二個隱式初始化),但這不適用於嵌套數組 。
float**
類型是指向指針的指針。 當您像2D數組/矩陣(應用了兩個下標運算符)一樣使用它時,第一個指針應指向一個指針數組,該指針指向更多數組(例如,單個行)。
但是, float[N][M]
是整個矩陣的連續內存塊。 沒有(行)指針的數組,也不能通過強制轉換為float**
隱式創建,因此,根據標准,這種強制轉換是不可能的。
您可以返回對多維數組的引用 。 為此,首先為您的矩陣創建一個typedef: typedef float matrix[20][4];
然后使用返回類型matrix&
或避免使用嵌套數組 。 使用一維數組並在訪問時計算索引(例如, matrix[row * N + col]
而不是matrix[row][col]
)。 將這個索引計算隱藏在一個矩陣類中,該矩陣類將為第一個operator[]
返回一個輔助對象。
更好: 使用線性代數庫來處理矩陣,例如本征。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.