2014-07-21 1 views
-1

Ceci est ma classe: méthodeerreur: la conversion de 'QStringList' type non scalaire 'QString' a demandé

// 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 .cpp 
#include "undoredo.h" 

UndoRedo::UndoRedo(QList<vector_t> v, 
        QUndoCommand *parent) 
    : QUndoCommand(parent) 
{ 
    cb_values = &v; 
} 

void UndoRedo::undo() {  
    QString last = cb_values[0][0].takeLast(); 
    qDebug() << last << "removed!"; 
} 

Quand j'appelle annuler() l'IDE soulève cette erreur:

erreur: la conversion de 'QStringList' type non scalaire 'QString' a demandé

Où suis-je tort?

Répondre

2

Dans votre constructeur, vous prenez l'adresse d'un paramètre qui disparaîtra lors du retour du constructeur:

cb_values = &v; 

Cette ligne compileront, mais il est absurde. Dès que le constructeur est revenu, le pointeur stocké dans cb_values est balancé et son utilisation ultérieure peut entraîner le formatage de votre disque dur.

Nous allons nous décomposer cb_values[0][0].takeLast().

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

Ainsi, le type de votre expression est QStringList, mais vous essayez de l'affecter à un QString. Je ne sais pas ce que tu voulais vraiment réaliser. Peut-être (*cb_values)[0][0].takeLast()?

+0

Oui, est juste (* cb_values) [0] [0] .takeLast() – user3713179

1

cb_values est pointeur vers QList<vector_t> alors cb_values[0] est QList<vector_t>. Donc cb_values[0] est vector_t, ou QVector<QStringList>. Ensuite, vous appelez takeLast() sur ce vecteur, et il renvoie QStringList, que vous essayez d'attribuer à QString. Il me semble que vous appelez takeLast() pas sur un objet que vous vouliez.

Questions connexes