C++ 如何将零填充多维数组传递给C++;?
我想将我的零填充nullMat多维指针数组传递给构造函数中名为setGraphics的函数。无论我以何种方式尝试这样做,我都会得到“论点不相容”或类似的东西 cpp文件Test.cppC++ 如何将零填充多维数组传递给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) :
#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,我在写作时把事情搞砸了。我是这个社区的新成员,而你已经让我有了新的一天。谢谢