在c ++中返回具有常量值的矩阵

时间:2018-03-13 12:57:36

标签: c++ arrays pointers

如何从函数返回2d常量值数组? 我需要返回这样的内容:

//I don't even know if this is the best way to do 2d arrays in c++.
const int matrix[4][2] = {
    {10,11},
    {12,13},
    {14,15},
    {16,17}
};

这是我试过的:

#include <iostream>

using namespace std;

int** createMatrix();

int main(){
    int **m = createMatrix();
    return 0;
}

const int** createMatrix(){
    const int **matrix = new const int*[4];

    matrix[0] = new const int[2] = {10,11};
    matrix[1] = new const int[2] = {12,13};
    matrix[2] = new const int[2] = {14,15};
    matrix[3] = new const int[2] = {16,17};

    return matrix;
}

我得到的输出:

  

main.cpp:在函数'const int ** createMatrix()'中:   main.cpp:12:13:错误:ambiguating'const int ** createMatrix()'的新声明    const int ** createMatrix(){                ^ ~~~~~~~~~~~

     

main.cpp:5:7:注意:旧声明'int ** createMatrix()'    int ** createMatrix();          ^ ~~~~~~~~~~~

     

main.cpp:15:29:错误:'const int'的'new'中未初始化的const     matrix [0] = new const int [2] = {10,11};                                ^

     

main.cpp:16:29:错误:'const int'的'new'中未初始化的const     matrix [1] = new const int [2] = {12,13};                                ^

     

main.cpp:17:29:错误:'const int'的'new'中未初始化的const     matrix [2] = new const int [2] = {14,15};                                ^

     

main.cpp:18:29:错误:'const int'的'new'中未初始化的const     matrix [3] = new const int [2] = {16,17};

3 个答案:

答案 0 :(得分:2)

简单的解决方案是创建一个数组数组,就像你先显示的一样,然后返回它。

在函数内部使static使其生命周期不会结束。并记住返回正确的类型(数组数组与指针指针不同)。

可选择使用std::array而不是普通的C风格数组。

如果在运行时可以配置大小,请使用std::vector

答案 1 :(得分:0)

函数声明和函数定义具有不同的返回类型。

int** createMatrix();

const int** createMatrix(){

也是这样的初始化

matrix[0] = new const int[2] = {10,11};

不正确。

看来你的意思是以下

#include <iostream>

const int** createMatrix();

int main()
{
    const int **m = createMatrix();
    return 0;
}

const int ** createMatrix()
{
    const int **matrix = new const int*[4];

    matrix[0] = new const int[2] {10,11};
    matrix[1] = new const int[2] {12,13};
    matrix[2] = new const int[2] {14,15};
    matrix[3] = new const int[2] {16,17};

    return matrix;
}

答案 2 :(得分:0)

您应该考虑将其保存为长度为1d的数组(xsize * ysize),据称这比保存2d数组要好。