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()