По всей видимости где-то запутывался синтаксический анализатор, но вот вопрос — как?
Итак, суть проблемы. Есть проект, написанный на Qt 5.0.2, собираемый на linux с помощью gcc 4.6.3. Но нужен он более на винде. И тут впервые в практике начались серьезные проблемы.
При попытке скомпилить на Qt5.1.0RC1 + mingw 4.8 Вылетает со следующей ошибкой:
Скрытый текстIn file included from c:\qt\qt5.1.0rc1\tools\mingw48_32\i686-w64-mingw32\include\oleidl.h:7:0,
from c:\qt\qt5.1.0rc1\tools\mingw48_32\i686-w64-mingw32\include\ole2.h:38,
from c:\qt\qt5.1.0rc1\tools\mingw48_32\i686-w64-mingw32\include\wtypes.h:12,
from c:\qt\qt5.1.0rc1\tools\mingw48_32\i686-w64-mingw32\include\winscard.h:10,
from c:\qt\qt5.1.0rc1\tools\mingw48_32\i686-w64-mingw32\include\windows.h:97,
from ..\..\..\..\Qt\Qt5.1.0RC1\5.1.0-rc1\mingw48_32\include/QtCore/qt_windows.h:71,
from ..\..\..\..\Qt\Qt5.1.0RC1\5.1.0-rc1\mingw48_32\include/QtCore/qwineventnotifier.h:48,
from ..\..\..\..\Qt\Qt5.1.0RC1\5.1.0-rc1\mingw48_32\include/QtCore/QtCore:79,
from ..\..\..\..\Qt\Qt5.1.0RC1\5.1.0-rc1\mingw48_32\include/QtConcurrent/QtConcurrentDepends:2,
from ..\..\..\..\Qt\Qt5.1.0RC1\5.1.0-rc1\mingw48_32\include/QtConcurrent/QtConcurrent:3,
from ..\UniversalViewer\main.cpp:2:
..\UniversalViewer\CameraSelectModel.h:34:73: error: expected ',' or '...' before 'struct'
void cameraData(const QModelIndex &index, ACameraDriversInterface **interface, QString *cameraName);
^
..\UniversalViewer\CameraSelectModel.h:41:34: error: expected unqualified-id before 'struct'
ACameraDriversInterface* interface;
^
In file included from ..\UniversalViewer\UniversalViewerCore.h:12:0,
from ..\UniversalViewer\main.cpp:5:
..\UniversalViewer\CameraSelectModel.h:41:32: error: expected ';' at end of member declaration
ACameraDriversInterface* interface;
^
..\UniversalViewer\CameraSelectModel.h:41:43: error: expected identifier before ';' token
ACameraDriversInterface* interface;
Попробовал скомпилить с помощью Qt5.0.2 + mingw 4.7
Ошибка вышла похожейIn file included from ..\UniversalViewer\UniversalViewerCore.h:12:0,
from ..\UniversalViewer\main.cpp:5:
..\UniversalViewer\CameraSelectModel.h:35:73: error: expected ',' or '...' before 'struct'
..\UniversalViewer\CameraSelectModel.h:42:34: error: expected unqualified-id before 'struct'
..\UniversalViewer\CameraSelectModel.h:42:32: error: expected ';' at end of member declaration
..\UniversalViewer\CameraSelectModel.h:42:43: error: expected identifier before ';' token
Стал копать и выяснил, что помимо всего прочего эту ситуацию мне обеспечило включение заголовков
QtCore и
QtConcurrent. Проблема вообщем решена, но хотелось бы знать в чем причина. Может у кого-нить есть идеи?
UPD:
По просьбе выкладываю код самого файла и всего сопутсвующего:
Скрытый текст#ifndef CAMERASELECTMODEL_H
#define CAMERASELECTMODEL_H
#include <QAbstractItemModel>
#include "ModulesManager.h"
#include "AFitsCameraDriver.h"
#include "GuiDescriptionCamera.h"
#include <QList>
/*!
* \brief Модель данных о доступных камерах в системе.
*/
class CameraSelectModel : public QAbstractItemModel
{
Q_OBJECT
public:
CameraSelectModel(QObject *parent=0);
void clear();
QModelIndex index(int row, int column, const QModelIndex &parent) const;
QModelIndex parent(const QModelIndex &child) const;
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;
void identefyCamera(const QModelIndex & index, int* cameraTypeId, QString *cameraName);
void updateCameraList();
void updateCameraList(const QModelIndex & index);
bool inline isCameraName(const QModelIndex & index ){return index.parent().isValid();}
void cameraData(const QModelIndex &index, ACameraDriversInterface **interface, QString *cameraName);
private:
struct Data
{
QString NameType;
QList<QString> devicesName;
bool isSystem;
ACameraDriversInterface* interface;
};
QVector <Data> m_registedCamera;
ModulesManager m_driverManger;
AFitsCameraDriver m_hddCamera;
};
#endif // CAMERASELECTMODEL_H
#ifndef MODULESMANAGER_H
#define MODULESMANAGER_H
#include <QList>
#include <QPluginLoader>
class ModulesManager
{
public:
ModulesManager();
~ModulesManager();
void reReadModules();
void loadDrivers(const QString &path);
QString driversPath();
private:
void clearModules();
public:
QList<QPluginLoader*> m_modules;
private:
QString m_path;
};
#endif // MODULESMANAGER_H
#ifndef AFITSCAMERADRIVER_H
#define AFITSCAMERADRIVER_H
#include <ACameraDriversInterface.h>
class AFitsCameraDriver: public QObject, public ACameraDriversInterface
{
Q_OBJECT
Q_INTERFACES(ACameraDriversInterface)
public:
AFitsCameraDriver();
//AAbstractCamera * createCamera()const;
QString type() const;
QString info() const;
QString version() const;
};
#endif // AFITSCAMERADRIVER_H
#ifndef GUIDESCRIPTIONCAMERA_H
#define GUIDESCRIPTIONCAMERA_H
#include <qglobal.h>
#include <QMetaType>
struct GuiDescriptionCmaera
{
template <typename T> struct Range{
T min;
T max;
};
Range<unsigned long> exposeRange;
Range<unsigned long> frequencyRange;
Range<unsigned long> gainRange;
Range<qint32> tempretureRange;
bool canSetExpose;
bool canSetFrequency;
bool canSetGain;
bool canSetTrigMode;
bool canSetTragetTempreture;
bool canSetBining;
};
Q_DECLARE_METATYPE(GuiDescriptionCmaera)
#endif // GUIDESCRIPTIONCAMERA_H
#pragma once
//#include <AAbstractCamera.h>
#include <QMetaType>
#ifndef A_CAMERA_DRIVERS_INTERFACE_IID
#define A_CAMERA_DRIVERS_INTERFACE_IID "camerainterface.drivers.alpha"
#endif
struct ACameraDescription
{
bool canSetExpose;
bool canSetFrequency;
bool canSetGain;
bool canSetTrigMode;
bool canSetTragetTempreture;
bool canSetBining;
};
class ACameraDriversInterface
{
public:
ACameraDriversInterface() {}
virtual ~ACameraDriversInterface(){}
const ACameraDescription & description()const {return m_description;}
// virtual AAbstractCamera * createCamera()const =0;
virtual QString type() const =0;
virtual QString info() const=0;
virtual QString version() const =0;
protected:
ACameraDescription m_description;
};
Q_DECLARE_INTERFACE(ACameraDriversInterface, A_CAMERA_DRIVERS_INTERFACE_IID)
Q_DECLARE_METATYPE(ACameraDescription)