scarleton
24th August 2010, 14:52
The model is two classes, base and derived, and both have corresponding interfaces, Ibase and Iderived. When I go to implement the derived class, I am getting ambiguous access errors, I am wondering if the mod compiler is messing me up. Here is the base interface (ICSData):
__interface ICSData
{
virtual CSBase* state() = 0;
virtual bool Load() = 0;
virtual bool Unload() = 0;
virtual bool Connect() = 0;
virtual bool Disconnect() = 0;
virtual int GetBatteryLevel() = 0;
virtual bool AcquireImage(long itemId, const QString& filepath) = 0;
virtual void onCameraDisconnected(long srcID) = 0;
virtual void onCameraConnected(long srcID) = 0;
virtual void onBatteryLevelChange(int percentage) = 0;
virtual void onImageCaptured(long itemId, QString name, QDateTime captureTime) = 0;
virtual void onProcessReset(long itemId, int maximum) = 0;
virtual void onProcessSetValue(long itemId, int value) = 0;
virtual const QString& lastError() const = 0;
virtual void setLastError(const QString& value) = 0;
};
And here is the base class:
class CSData : public QObject, public ICSData
{
Q_OBJECT
public:
CSData(QObject *parent);
~CSData();
CSBase* state() { return _state; }
void setState(CSBase* val) { _state = val; }
CSBase* csUnloaded();
CSBase* csInitialized();
CSBase* csConnected();
CSBase* csCaptured();
virtual void onCameraDisconnected(long srcID);
virtual void onCameraConnected(long srcID);
virtual void onBatteryLevelChange(int percentage);
virtual void onImageCaptured(long itemId, QString name, QDateTime captureTime);
virtual void onProcessReset(long itemId, int maximum);
virtual void onProcessSetValue(long itemId, int value);
virtual QMessageBox::StandardButton uiRequest(const QString& prompt, const QString& detail, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton);
virtual const QString& lastError() const;
virtual void setLastError(const QString& value);
signals:
void cameraDisconnected(long srcID);
void cameraConnected(long srcID);
void batteryLevelChange(int percentage);
void imageCaptured(long itemId, QString name, QDateTime captureTime);
void processReset(long itemId, int maximum);
void processSetValue(long itemId, int value);
protected:
QString _lastError;
private:
CSBase * _state;
CSUnloaded * _csUnloaded;
CSInitialized * _csInitialized;
CSConnected * _csConnected;
CSCaptured * _csCaptured;
};
These are the methods causing problems:
onCameraDisconnected
onCameraConnected
onBatteryLevelChange
onImageCaptured
onProcessReset
onProcessSetValue
uiRequest
lastError
setLastError
For the record, I MUST have the interfaces because of circular references elsewhere in the code.
Sam
__interface ICSData
{
virtual CSBase* state() = 0;
virtual bool Load() = 0;
virtual bool Unload() = 0;
virtual bool Connect() = 0;
virtual bool Disconnect() = 0;
virtual int GetBatteryLevel() = 0;
virtual bool AcquireImage(long itemId, const QString& filepath) = 0;
virtual void onCameraDisconnected(long srcID) = 0;
virtual void onCameraConnected(long srcID) = 0;
virtual void onBatteryLevelChange(int percentage) = 0;
virtual void onImageCaptured(long itemId, QString name, QDateTime captureTime) = 0;
virtual void onProcessReset(long itemId, int maximum) = 0;
virtual void onProcessSetValue(long itemId, int value) = 0;
virtual const QString& lastError() const = 0;
virtual void setLastError(const QString& value) = 0;
};
And here is the base class:
class CSData : public QObject, public ICSData
{
Q_OBJECT
public:
CSData(QObject *parent);
~CSData();
CSBase* state() { return _state; }
void setState(CSBase* val) { _state = val; }
CSBase* csUnloaded();
CSBase* csInitialized();
CSBase* csConnected();
CSBase* csCaptured();
virtual void onCameraDisconnected(long srcID);
virtual void onCameraConnected(long srcID);
virtual void onBatteryLevelChange(int percentage);
virtual void onImageCaptured(long itemId, QString name, QDateTime captureTime);
virtual void onProcessReset(long itemId, int maximum);
virtual void onProcessSetValue(long itemId, int value);
virtual QMessageBox::StandardButton uiRequest(const QString& prompt, const QString& detail, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton);
virtual const QString& lastError() const;
virtual void setLastError(const QString& value);
signals:
void cameraDisconnected(long srcID);
void cameraConnected(long srcID);
void batteryLevelChange(int percentage);
void imageCaptured(long itemId, QString name, QDateTime captureTime);
void processReset(long itemId, int maximum);
void processSetValue(long itemId, int value);
protected:
QString _lastError;
private:
CSBase * _state;
CSUnloaded * _csUnloaded;
CSInitialized * _csInitialized;
CSConnected * _csConnected;
CSCaptured * _csCaptured;
};
These are the methods causing problems:
onCameraDisconnected
onCameraConnected
onBatteryLevelChange
onImageCaptured
onProcessReset
onProcessSetValue
uiRequest
lastError
setLastError
For the record, I MUST have the interfaces because of circular references elsewhere in the code.
Sam