PDA

View Full Version : سوال: error: ISO C++ forbids declaration of ‘QQueue’ with no type



woeful
دوشنبه 04 بهمن 1389, 00:25 صبح
سلام
من کد زیر رو نوشتم اما ارور میگیرم


#ifndef TRANSACTIONTHREAD_H
#define TRANSACTIONTHREAD_H
#include<QThread>
class QImage;
class QWaitCondition;
class QMutex;
class Transaction;

class TransactionThread : public QThread
{
Q_OBJECT
public:
TransactionThread();
~TransactionThread();
void addTransaction(Transaction *transact);
void setImage(const QImage &image);
QImage image();
signals:
void transactionStarted(const QString &message);
void allTransactionDone();
protected:
void run();
private:
QImage currentImage;
QQueue<Transaction *> transactions;
QWaitCondition transactionAdded;
QMutex mutex;
Transaction *EndTransaction;
};
#endif

ارور :


woeful@woeful:~/Desktop/Qt/Qt Book/image$ make
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o main.o main.cpp
In file included from mainwindow.h:5,
from main.cpp:2:
transactionthread.h:25: error: ISO C++ forbids declaration of ‘QQueue’ with no type
transactionthread.h:25: error: expected ‘;’ before ‘<’ token
transactionthread.h:26: error: field ‘transactionAdded’ has incomplete type
transactionthread.h:27: error: field ‘mutex’ has incomplete type
make: *** [main.o] Error 1
woeful@woeful:~/Desktop/Qt/Qt Book/image$


خودم فک میکنم مشکل از سرآیند ها باشه اما نمیدونم مشکل چیه :گریه:

سرچ هم زیاد کردم

این کد مربوط مشه به کتاب c-gui-programming-with-qt-4-2ndedition

بخش 14. Multithreading

قسمت Communicating with the Main Thread
اگه کسی این کتاب رو خونده و برنامه این قسمت رو نوشته و برنامه درست run شده یه زحمت بکشه کد هاشو برای من upload کنه.
3 روزه گیر کردم لطفا کمک کنید . :گریه:

باتشکر
Woeful

.:saeed:.
دوشنبه 04 بهمن 1389, 07:52 صبح
سلام
forward declaration ها رو به include تبدیل کنید


class Transaction;
#include <QImage>
#include <QQueue>
#include <QWaitCondition>
#include <QMutex>

#include <QThread>



در حالات زیر شما نمی تونید از forward declaration استفاده کنید

انتخاب آن کلاس به عنوان کلاس پایه
وقتی که یک عضو داده (data member ) از اون کلاس قراره عضو کلاس جاری باشه . مثل شما که QImage currentImage; را عضو کلاس کردین ولی ...
استفاده از توابع و عضو های اون کلاس حتی وقتی ازش اشاره گر تعریف شده باشه .
.
.
.

woeful
دوشنبه 04 بهمن 1389, 10:47 صبح
سلام ممنون از جواب ارور اونجا رو رد کرد اما در زمان compile یه ارور دیگه داد که داخل یه تا\یک دیگه میزارم سوالمو ممنون

حامد مصافی
دوشنبه 04 بهمن 1389, 18:43 عصر
نکته: وقتی نام یک کلاس را به صورت پیشرو اعلان می‌کنید به زبان ساده به کامپایلر اعلام می‌کنید که این کلاس بعدا تعریف خواهد شد، تعریف این کلاس در فابل header همان کلاس صورت گرفته است. لذا در صورتی که در یک فایل h کلاسی را forward declaration کردید در هنگام استفاده از این فایل باید کلاس‌های اعلان شده را تعریف کنید، یا به بیان ساده تر اگر در فایلی TransactionThread.h وارد شد فایل های زیر نیز باید include شوند.
QImage QWaitCondition QMutex Transaction

woeful
سه شنبه 26 بهمن 1389, 00:13 صبح
سلام

من دوباره با این قضیه مشکل دارم

کد :

#ifndef SPIDER_H
#define SPIDER_H

#include <QStringList>
#include<QUrlInfo>
#include <QUrl>
#include <QFile>
#include <QFtp>

class Spider : public QObject
{
Q_OBJECT;
public:
Spider ( QObject *parent = 0);
bool getDirectory(const QUrl &url);
signals:
bool done();
private slots:
void ftpDone(bool error);
void ftpListInfo(const QUrlInfo &urlInfo);
private :
void processNextDirectory();
QFtp ftp;
QList <QFile *> openedFiles;
QString currentDir;
QString currentLocalDir;
QStringList pendingDirs;
};

#endif


ارور :

woeful@woeful:~/Desktop/Qt/Qt Book/spider$ make
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o main.o main.cpp
In file included from main.cpp:3:
spider.h:5:19: error: QUrlInfo: No such file or directory
spider.h:8:16: error: QFtp: No such file or directory
In file included from main.cpp:3:
spider.h:20: error: ISO C++ forbids declaration of ‘QUrlInfo’ with no type
spider.h:20: error: expected ‘,’ or ‘...’ before ‘&’ token
spider.h:23: error: ‘QFtp’ does not name a type
make: *** [main.o] Error 1


اگه آمورشی در مورد ای اعلان پیشرو یا کلا در مورد نوشتن برنامه در چند فایل و این جور چیزا هست به من بدین .(فارسی بهتره) :لبخند:

توی این موضوع مشکل دارم :لبخند:

با تشکر
Woeful

.:saeed:.
سه شنبه 26 بهمن 1389, 11:53 صبح
مطمئنید که ماژول شبکه رو به پروژه تون اضافه کردین . فایل .pro تون باید حاوی خط زیر باشه .

QT += network