Russian Qt Forum

Qt => Общие вопросы => Тема начата: GPPsoft от Декабрь 22, 2013, 10:02



Название: Не пойму почему "does not name a type"
Отправлено: GPPsoft от Декабрь 22, 2013, 10:02
Не пойму в чем проблема. Есть класс:
Код:
#ifndef SCREENANALYZER_H
#define SCREENANALYZER_H

#include <QObject>
#include <QSize>
#include <QImage>
#include <QBuffer>
#include <QDesktopWidget>
#include "compareimages.h"
#include "session.h"

class ScreenAnalyzer : public QObject
{
    Q_OBJECT
public:
    explicit ScreenAnalyzer(QObject *parent = 0);

signals:

public slots:
    void analyze();
    static QSize getThumbnailSize(QImage &image);
    static QImage getScreenshot();
    static QByteArray imageToArray(QImage &image);
private:
    Session *session;
};
 // SCREENANALYZER_H
#endif

Ругается на Session *session(does not name a type)

Session:
Код:
#ifndef SESSION_H
#define SESSION_H

#include <QMessageBox>
#include <QObject>
#include <QTcpSocket>
#include <rc4.h>
#include <packetsplitter.h>
#include <screenanalyzer.h>
#include <QJsonObject>
#include <QJsonDocument>
#include <screenfull.h>
#include <screenpreview.h>

typedef unsigned char BYTE;

class Session : public QObject
{
    Q_OBJECT
public:
    explicit Session(QObject *parent = 0);

signals:

public slots:
    void sendData(QByteArray packet);
    void connectTo(QString host,int port);

private slots:
    void on_connected();
    void on_disconnected();
    void on_data();
    void on_packet(QByteArray *packet);

private:
    QTcpSocket *tcpSocket;
    RC4 *rc4;
    PacketSplitter *packetSplitter;
    bool isAuth=false;
};

#endif // SESSION_H


Хотя в другом классе все нормально и при include "session.h" такой ошибки нет. Ничего не могу понять. Неужели компилятор не может понять если классы используют друг друга и у них есть includ-ы друг друга?


Название: Re: Не пойму почему "does not name a type"
Отправлено: Igors от Декабрь 22, 2013, 11:22
Сделайте поиск #define SESSION_H - он должен быть только в session.h и нигде больше

Если, как у Вас, используется только указатель/ссылка на Session, то грамотнее так
Код
C++ (Qt)
// #include "session.h"   // перенести в cpp файл
 
class Session;