C++ 如何将零填充多维数组传递给C++;?

C++ 如何将零填充多维数组传递给C++;?,c++,arrays,multidimensional-array,visual-c++,C++,Arrays,Multidimensional Array,Visual C++,我想将我的零填充nullMat多维指针数组传递给构造函数中名为setGraphics的函数。无论我以何种方式尝试这样做,我都会得到“论点不相容”或类似的东西 cpp文件Test.cpp #include "Test.h" #include <QGraphicsScene> #include <QGraphicsRectItem> #include <QGraphicsView> Test::Test(QWidget *parent) :

我想将我的零填充nullMat多维指针数组传递给构造函数中名为setGraphics的函数。无论我以何种方式尝试这样做,我都会得到“论点不相容”或类似的东西

cpp文件Test.cpp

#include "Test.h"
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QGraphicsView>

Test::Test(QWidget *parent) : QMainWindow(parent)
{  
    ui.setupUi(this);
    lifeMatrix(5);
    setGraphics(nullMat(), 50);
    
}

void Test::setGraphics(bool **lifeMat, int scale)
{
    QGraphicsScene* scena = new QGraphicsScene();
    ui.view->setScene(scena);
    int lDydis = 50;        // nusistato langelio dydis, bus galima pakeist i variable
    for (int row = 0; row < scale; row++)
    {
        for (int column = 0; column < scale; column++)
        {
            QGraphicsRectItem* rect = new QGraphicsRectItem();
            rect->setRect(row * lDydis, column * lDydis, lDydis, lDydis);          
            if (lifeMat[row][column] == 1) rect->setBrush(Qt::white);
            if (lifeMat[row][column] == 0) rect->setBrush(Qt::black);
            rect->show();
            scena->addItem(rect);

        }
    }
}
#包括“Test.h”
#包括
#包括
#包括
测试::测试(QWidget*父项):QMainWindow(父项)
{  
ui.setupUi(这个);
寿命矩阵(5);
设置图形(nullMat(),50);
}
无效测试::设置图形(布尔**lifeMat,整数刻度)
{
qgraphicscene*scena=新的qgraphicscene();
ui.view->setScene(scena);
int lDydis=50;//nusistato langelio dydis,总线galima pakeist i变量
用于(int row=0;rowsetRect(行*lDydis,列*lDydis,lDydis,lDydis);
if(lifeMat[row][column]==1)rect->setBrush(Qt::white);
if(lifeMat[row][column]==0)rect->setBrush(Qt::black);
rect->show();
场景->附加项(矩形);
}
}
}
以及头文件Test.h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_Test.h"

class Test : public QMainWindow
{
    Q_OBJECT

public:
    Test(QWidget *parent = Q_NULLPTR);
    void nullMat(bool **lifeMat) { for (int i = 0; i < 5; i++) for (int j = 0; j < 5; j++) lifeMat[i][j] = 0; };
    void setGraphics(bool** lifeMat, int);
    int scale; // common, nustato matricos dydi rpagal column/row nariu skaiciu
    void lifeMatrix(int scale)
    {
        // Matricos dydis x*y
        bool** lifeMat = new bool* [scale];
        for (unsigned int i = 0; i < scale; ++i) lifeMat[i] = new bool[scale];
    }
private:
    Ui::TestClass ui;
    
};

#pragma一次
#包括
#包括“ui_Test.h”
类测试:公共QMainWindow
{
Q_对象
公众:
测试(QWidget*parent=Q_NULLPTR);
void nullMat(bool**lifeMat){for(int i=0;i<5;i++)for(int j=0;j<5;j++)lifeMat[i][j]=0;};
无效设置图形(bool**lifeMat,int);
int scale;//通用,nustato matricos dydi rpagal列/行nariu skaiciu
空隙寿命矩阵(整数比例)
{
//动态矩阵x*y
bool**lifeMat=新bool*[比例];
对于(无符号整数i=0;i
我不知道如何解决这个问题,我已经试了很长时间了。
任何帮助都将不胜感激。

显然您不知道何时从函数返回值
lifeMatrix
正在创建矩阵,因此需要返回矩阵
nullMat
只是修改矩阵,因此不需要返回矩阵

像这样重写代码

class Test : public QMainWindow
{
    ...
    void nullMat(bool **lifeMat) { ... }
    ...
    bool **lifeMatrix(int scale)
    {
        // Matricos dydis x*y
        bool** lifeMat = new bool* [scale];
        for (unsigned int i = 0; i < scale; ++i) lifeMat[i] = new bool[scale];
        return lifeMat;
    }
    ...
}

Test::Test(QWidget *parent) : QMainWindow(parent)
{  
    ui.setupUi(this);
    bool** mat = lifeMatrix(5);
    nullMat(mat);
    setGraphics(mat, 50);
}
类测试:公共QMainWindow
{
...
无效nullMat(bool**lifeMat){…}
...
布尔**寿命矩阵(整数比例)
{
//动态矩阵x*y
bool**lifeMat=新bool*[比例];
对于(无符号整数i=0;i

代码似乎仍在泄漏内存,因为矩阵从未在任何地方删除。也许你真的需要把矩阵变成一个成员变量。这将再次改变代码。

您使用的是
nullMat()
,就好像它返回了什么(
setGraphics(nullMat(),50);
),但它被定义为void:
void nullMat(bool**lifeMat)
,并带有参数。您希望如何使用它?编译时使用并启用所有警告和调试信息(使用
g++-Wall-Wextra-g
),非常感谢您的回答!是的,我还在深入学习编码,你的帮助让我真正理解了我的错误。这确实帮助我消除了这个问题,但现在我在Test.exe:0xC0000005:访问冲突读取位置0xFFFFFFFFFFFFFF中的0x00007FF701DA2B88处引发了一个异常
异常。发生在此行
如果(lifeMat[row][collumn]==1)rect->setBrush(Qt::white)lifeMatrix(5)。。。设置图形(nullMat(),50)
scale
的值应该是5还是50?目前
lifeMatrix
正在创建一个5x5矩阵,但是
setGraphics
正在使用一个50x50矩阵。你完全正确。在这两种情况下都应该是5,我在写作时把事情搞砸了。我是这个社区的新成员,而你已经让我有了新的一天。谢谢