C++ 二维数组Qt、初始化和使用
也许我只是太累了,我想的不够清楚,也许我是个Qt编程高手,但我在初始化和使用二维数组时遇到了问题 我创建了OutputData类,如下所示:C++ 二维数组Qt、初始化和使用,c++,arrays,qt,C++,Arrays,Qt,也许我只是太累了,我想的不够清楚,也许我是个Qt编程高手,但我在初始化和使用二维数组时遇到了问题 我创建了OutputData类,如下所示: #ifndef OUTPUTDATA_H #define OUTPUTDATA_H #include <QObject> #include "algorithms/data/tabledata.h" #include <QVector> #include <QDebug> class OutputData : publ
#ifndef OUTPUTDATA_H
#define OUTPUTDATA_H
#include <QObject>
#include "algorithms/data/tabledata.h"
#include <QVector>
#include <QDebug>
class OutputData : public QObject
{
Q_OBJECT
Q_ENUMS(direction)
public:
explicit OutputData(const int xSize, const int ySize, QObject *parent = 0);
enum direction {left, front, right, back };
double rightDistance;
double leftDistance;
double frontDistance;
int xShift;
int yShift;
direction currentDir;
int turnCount;
int currentDirection;
TableData** table;
QString toString();
void saveFieldInfo();
signals:
public slots:
private:
};
#endif // OUTPUTDATA_H
if(table[x][y] ==NULL){
table[x][y] = new TableData();
}
table[x][y].method();
在outputdata.cpp中
table = new QVector<QVector<TableData*> >(10, QVector<TableData*>(10));
或者我应该这样做:
#ifndef OUTPUTDATA_H
#define OUTPUTDATA_H
#include <QObject>
#include "algorithms/data/tabledata.h"
#include <QVector>
#include <QDebug>
class OutputData : public QObject
{
Q_OBJECT
Q_ENUMS(direction)
public:
explicit OutputData(const int xSize, const int ySize, QObject *parent = 0);
enum direction {left, front, right, back };
double rightDistance;
double leftDistance;
double frontDistance;
int xShift;
int yShift;
direction currentDir;
int turnCount;
int currentDirection;
TableData** table;
QString toString();
void saveFieldInfo();
signals:
public slots:
private:
};
#endif // OUTPUTDATA_H
if(table[x][y] ==NULL){
table[x][y] = new TableData();
}
table[x][y].method();
很抱歉使用java样式:(您的
TableData
类是QObject
的子类,因此无法复制或复制分配。这就是您出现编译错误的原因
您的数组应该使用指向TableData
实例的指针,即使用new
创建TableData
实例。您的table
声明应该是
TableData*** table;
与其使用内置数组,不如使用容器。我注意到有一行注释掉了,它使用的是TableData*
的QVectors的QVectors,因此我不确定您是否尝试将容器方法移植到内置数组。除非您有有充分的理由不这样做
<> P> >回答你的编辑,我认为你在java和C++之间变得混淆了。C++中,你只需要<代码>新< /Cord>进行动态内存分配。它返回一个指针。你的<代码>表< /C>变量已经被声明为<代码> QVector <代码>,而不是一个指针,所以当你实例化类时,它的存储将被设置。你所需要做的就是
OutputData::OutputData(const int xSize,const int ySize, QObject *parent) :
QObject(parent),
table(ySize) // resize to ySize (empty) rows
{
for(int i = 0; i < ySize; i++){
QVector<TableData*>& row = table[i];
row.resize(xSize); // Each TableData pointer will be initialised to NULL
for(int j = 0; j < xSize; j++){
row[j] = new TableData();
}
}
// ...
您的
TableData
类是QObject
的子类,因此无法复制或复制分配。这就是为什么会出现编译错误
您的数组应该使用指向TableData
实例的指针,即使用new
创建TableData
实例。您的table
声明应该是
TableData*** table;
与其使用内置数组,不如使用容器。我注意到有一行注释掉了,它使用的是TableData*
的QVectors的QVectors,因此我不确定您是否尝试将容器方法移植到内置数组。除非您有有充分的理由不这样做
<> P> >回答你的编辑,我认为你在java和C++之间变得混淆了。C++中,你只需要<代码>新< /Cord>进行动态内存分配。它返回一个指针。你的<代码>表< /C>变量已经被声明为<代码> QVector <代码>,而不是一个指针,所以当你实例化类时,它的存储将被设置。你所需要做的就是
OutputData::OutputData(const int xSize,const int ySize, QObject *parent) :
QObject(parent),
table(ySize) // resize to ySize (empty) rows
{
for(int i = 0; i < ySize; i++){
QVector<TableData*>& row = table[i];
row.resize(xSize); // Each TableData pointer will be initialised to NULL
for(int j = 0; j < xSize; j++){
row[j] = new TableData();
}
}
// ...
QVector矩阵{{“foo”、“bar”、“baz”}、{“hello”、“world”、“!”};
qDebug()QVector矩阵{{{“foo”,“bar”,“baz”},{“hello”,“world”,“!”};
qDebug()另一个选项是不从QObject
派生,因为这个类似乎没有任何理由这样做。谢谢你的回答,我决定使用QVector。但我遇到了另一个奇怪的问题。请检查编辑的问题。另一个选项是不从QObject
派生,因为似乎没有任何原因关于本课程,谢谢你们的回答。我决定使用QVector。但我遇到了另一个奇怪的问题。请检查编辑的问题。
QVector<QStringList> matrix{{"foo", "bar", "baz"}, {"hello", "world", "!"}};
qDebug() << "output: " << matrix[0];