2016-04-21 8 views
0

gibt den Code unten gegeben, ich die folgenden Fehler erhalten:QtConcurrent Fehler

fileio.cpp:47: error: C3867: 'FileIO::read': non-standard syntax; use '&' to create a pointer to member

fileio.cpp:47: error: C2780: 'QFuture QtConcurrent::map(Iterator,Iterator,MapFunctor)': expects 3 arguments - 2 provided

Warum ist das so?

fileio.h

#ifndef FILEIO_H 
#define FILEIO_H 

#include <QtCore> 

class FileIO : public QObject 
{ 
    Q_OBJECT 
    Q_DISABLE_COPY(FileIO) 

signals: 
    void finished(); 

public slots: 
    Q_INVOKABLE void cancel(); 

private: 
    void read(QString &fileURL); 

public: 
    FileIO(QObject *parent = 0); 
    ~FileIO(); 


    Q_INVOKABLE void read_b64(const QString &fileURL); 

}; 

#endif // FILEIO_H 

fileio.cpp

#include "fileio.h" 
#include <QFile> 
#include <QDebug> 
#include <QUrl> 
#include <QThread> 
#include <QtConcurrent> 

FileIO::FileIO(QObject *parent) 
    : QObject(parent) 
{ 
} 

FileIO::~FileIO() 
{ 
} 

void FileIO::read(QString &filePath) 
{ 
    QByteArray finalBytes = QByteArray(); 

    filePath = QUrl(filePath).toLocalFile(); 

    QFile file(filePath); 

    qDebug() << "file size: " << file.size(); 
    if (file.open(QIODevice::ReadOnly)) { 
     finalBytes = file.readAll(); 
    } 

    qDebug() << "byte size: " << finalBytes.length(); 

    //bytes.toBase64(); 
} 


void FileIO::read_b64(const QString &filePath) 
{ 

    QFutureWatcher<void> futureWatcher; 
    QObject::connect(this, &FileIO::cancel, &futureWatcher, &QFutureWatcher<void>::cancel, Qt::UniqueConnection); 
    QObject::connect(&futureWatcher, &QFutureWatcher<void>::finished, this, &FileIO::finished); 


    QStringList filePaths; 
    filePaths << filePath; 

    QFuture<void> future = QtConcurrent::map(filePaths, this->read); 

    futureWatcher.setFuture(future); 
} 

Antwort

0

this->read ist ungültig. Sie wollen std::bind verwenden, um die nicht-statische Member-Funktion mit einer Instanz zu binden, eine aufrufbare erstellen und dann die erste Überlastung von QtConcurrent::map zu nennen, wobei zwei Argumente:

QFuture<void> future = 
    QtConcurrent::map(filePaths, std::bind(&FileIO::read, this)); 
+0

enthalten und diese Zeile ersetzt, aber immer noch Fehler bekommen .. – davidkomer

+0

okay, einfach deklarieren lesen ohne den Klassennamespace (nicht sicher, das richtige Wort dafür) gearbeitet. d. h. void lesen nicht void FileIO :: lesen – davidkomer

+0

hat es funktioniert jetzt: D – davidkomer

Verwandte Themen