Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:从';QStringList';到非标量类型';QString';请求_C++_Qt_Qtcore_Qlist_Qvector - Fatal编程技术网

C++ 错误:从';QStringList';到非标量类型';QString';请求

C++ 错误:从';QStringList';到非标量类型';QString';请求,c++,qt,qtcore,qlist,qvector,C++,Qt,Qtcore,Qlist,Qvector,这是我的班级: // file .h #ifndef UNDOREDO_H #define UNDOREDO_H #include <QUndoCommand> typedef QVector<QStringList> vector_t ; class UndoRedo : public QUndoCommand { public: UndoRedo(QList<vector_t> v, QUndoC

这是我的班级:

// file .h
#ifndef UNDOREDO_H
#define UNDOREDO_H

#include <QUndoCommand>

typedef QVector<QStringList> vector_t ;

class UndoRedo : public QUndoCommand
 {
 public:
     UndoRedo(QList<vector_t> v,
                    QUndoCommand *parent = 0);

     void undo();
 private:    
     QList<vector_t> *cb_values;
 };

#endif // UNDOREDO_H
//file.h
#如果没有恢复
#定义UNDOREDO_H
#包括
typedef QVector_t;
类UndoRedo:publicQundoCommand
{
公众:
撤消重做(QList v,
QUNDOMAND*父项=0);
无效撤消();
私人:
QList*cb_值;
};
#endif//UNDOREDO\u H
//file.cpp
#包括“undoredo.h”
UndoRedo::UndoRedo(QList v,
QUNDO命令*父级)
:QUNDO命令(父级)
{
cb_值=&v;
}
void UndoRedo::undo(){
QString last=cb_值[0][0]。takeLast();

qDebug()是指向
QList
的指针,所以
cbu值[0]
QList
。所以
cbu值[0]
vector\t
,或者
QVector
。然后调用
takeLast()
在这个向量上,它返回
QStringList
,您尝试将其分配给
QString
。在我看来,您调用的是
takeLast()
,而不是您想要的对象。

在构造函数中,您使用的是一个参数的地址,当构造函数返回时,该参数将消失:

cb_values = &v;
这一行将被编译,但它毫无意义。一旦构造函数返回,存储在
cb_values
中的指针就会悬空,并且它的进一步使用可能会导致硬盘格式化

让我们分解
cbu值[0][0].takeLast()

QList*cb_值
QList cb_值[0]
QVector=向量值[0][0]
QStringList cb_值[0][0]。takeLast()
因此,表达式的类型是
QStringList
,但您试图将其分配给
QString
。我不知道您真正想要实现的是什么。可能是
(*cb_值)[0][0]。takeLast()

是的,只是(*cb_值)[0]。takeLast()
cb_values = &v;
QList<vector_t> * cb_values
QList<vector_t> cb_values[0]
QVector<QStringList>=vector_t cb_values[0][0]
QStringList cb_values[0][0].takeLast()