cyberboy
24th May 2008, 19:55
Hi guys,
I'm busy to program a little bit more OOP in c++.
But I'm stuck with my first OOP look a like script.
The idea is a factory pattern, I have one abstract interface abstractOrderRecord.h
And a child class orderAddRecord.h and in the future order.h and some other.
This is abstractOrderRecord.h
#ifndef ORDERRECORD_H
#define ORDERRECORD_H
#include <QObject>
class QDate;
class QStringList;
class QString;
struct article {
QString description, customization, nr;
int ordered, delivered;
float price;
QDate *warrentyDate;
};
class OrderRecord : public QObject
{
Q_OBJECT
public:
//set methods
virtual void setOrderId(const int);
virtual void setCid(const int);
virtual void setDeadline(const QDate );
virtual void setPrepayment(const float);
virtual void setPreviousState(const int);
virtual void setCurrentState(const int);
virtual void addArticle(const QString, const QString, const QString, const float, const int, const int, const QDate);
virtual void addArticle(const struct article);
//accessors
virtual int getOrderId();
virtual int getCid();
virtual QDate getDeadline();
virtual float getPrepayment();
virtual int getPreviousState();
virtual int getCurrentState();
virtual article getArticle(int);
};
#endif
This is orderAddRecord.h
#ifndef ORDERADDRECORD_H
#define ORDERADDRECORD_H
#include <QObject>
#include <QWidget>
#include "AbstractOrderRecord.h"
class QDate;
class QStringList;
class OrderAddRecord : public QObject, public virtual OrderRecord {
Q_OBJECT
public:
OrderAddRecord(QWidget *parent = 0);
void setOrderId(const int);
void setCid(const int);
void setDeadline(const QDate);
void setPrepayment(const float);
void setPreviousState(const int);
void setCurrentState(const int);
void addArticle(const struct article);
void addArticle(const QString, const QString, const QString, const float, const int, const int, const QDate);
private:
int orderId;
int cid;
QDate *deadline;
float prepayment;
int previousState;
int currentState;
QStringList *articles;
};
#endif
This is orderAddRecord.cpp
#include "orderAddRecord.h"
#include <QtCore>
OrderAddRecord::OrderAddRecord(QWidget *parent)
: QObject(parent)
{
this->deadline = new QDate();
this->articles = new QStringList();
}
void OrderAddRecord::setOrderId(const int orderId)
{
this->orderId = orderId;
}
void OrderAddRecord::setCid(const int cid)
{
this->cid = cid;
}
void OrderAddRecord::setDeadline(const QDate deadline)
{
this->deadline = deadline;
}
void OrderAddRecord::setPrepayment(const float amount)
{
this->prepayment = amount;
}
void OrderAddRecord::setPreviousState(const int state)
{
this->previousState = state;
}
void OrderAddRecord::setCurrentState(const int state)
{
this->currentState = state;
}
void OrderAddRecord::addArticles(const struct article Article)
{
this->articles << Article;
}
void OrderAddRecord::addArticles(const QString description, const QString nr, const QString customization, const float price, const int delivered, const int ordered, const QDate &warrentyDate)
{
article tmpArticle;
tmpArticle.description = description;
tmpArticle.nr = nr;
tmpArticle.customization = customization;
tmpArticle.price = price;
tmpArticle.delivered = delivered;
tmpArticle.ordered = ordered;
tmpArticle.warrentyDate = new QDate();
tmpArticle.warrentyDate = warrentyDate;
this->articles << tmpArticle;
}
And this is the error I get over and over again.
warning: direct base 'QObject' inaccessible in 'OrderAddRecord' due to ambiguity
error: cannot convert 'const QDate' to 'QDate*' in assignment
error: no 'void OrderAddRecord::addArticles(article)' member function declared in class 'OrderAddRecord'
error: no match for 'operator<<' in '((OrderAddRecord*)this)->OrderAddRecord::articles << Article'
error: prototype for 'void OrderAddRecord::addArticles(QString, QString, QString, float, int, int, const QDate&)' does not match any in class 'OrderAddRecord'
error: candidate is: void OrderAddRecord::addArticles(article)
error: cannot convert 'const QDate' to 'QDate*' in assignment
error: no match for 'operator<<' in '((OrderAddRecord*)this)->OrderAddRecord::articles << tmpArticle'
So I'm doing something terrible wrong.
After I changed the warrentyDate to *warrentyDate in the structure definition I got an error less to worry about.
So I assume that QDate variables has to be an pointer, but how can I copy the QDate passed in the function to the local warrentyDate or deadline variable.
And I can't get the structure working in the function, does somebody know how to pass structures as arguments in a function?
Many thanks,
Cyberboy
I'm busy to program a little bit more OOP in c++.
But I'm stuck with my first OOP look a like script.
The idea is a factory pattern, I have one abstract interface abstractOrderRecord.h
And a child class orderAddRecord.h and in the future order.h and some other.
This is abstractOrderRecord.h
#ifndef ORDERRECORD_H
#define ORDERRECORD_H
#include <QObject>
class QDate;
class QStringList;
class QString;
struct article {
QString description, customization, nr;
int ordered, delivered;
float price;
QDate *warrentyDate;
};
class OrderRecord : public QObject
{
Q_OBJECT
public:
//set methods
virtual void setOrderId(const int);
virtual void setCid(const int);
virtual void setDeadline(const QDate );
virtual void setPrepayment(const float);
virtual void setPreviousState(const int);
virtual void setCurrentState(const int);
virtual void addArticle(const QString, const QString, const QString, const float, const int, const int, const QDate);
virtual void addArticle(const struct article);
//accessors
virtual int getOrderId();
virtual int getCid();
virtual QDate getDeadline();
virtual float getPrepayment();
virtual int getPreviousState();
virtual int getCurrentState();
virtual article getArticle(int);
};
#endif
This is orderAddRecord.h
#ifndef ORDERADDRECORD_H
#define ORDERADDRECORD_H
#include <QObject>
#include <QWidget>
#include "AbstractOrderRecord.h"
class QDate;
class QStringList;
class OrderAddRecord : public QObject, public virtual OrderRecord {
Q_OBJECT
public:
OrderAddRecord(QWidget *parent = 0);
void setOrderId(const int);
void setCid(const int);
void setDeadline(const QDate);
void setPrepayment(const float);
void setPreviousState(const int);
void setCurrentState(const int);
void addArticle(const struct article);
void addArticle(const QString, const QString, const QString, const float, const int, const int, const QDate);
private:
int orderId;
int cid;
QDate *deadline;
float prepayment;
int previousState;
int currentState;
QStringList *articles;
};
#endif
This is orderAddRecord.cpp
#include "orderAddRecord.h"
#include <QtCore>
OrderAddRecord::OrderAddRecord(QWidget *parent)
: QObject(parent)
{
this->deadline = new QDate();
this->articles = new QStringList();
}
void OrderAddRecord::setOrderId(const int orderId)
{
this->orderId = orderId;
}
void OrderAddRecord::setCid(const int cid)
{
this->cid = cid;
}
void OrderAddRecord::setDeadline(const QDate deadline)
{
this->deadline = deadline;
}
void OrderAddRecord::setPrepayment(const float amount)
{
this->prepayment = amount;
}
void OrderAddRecord::setPreviousState(const int state)
{
this->previousState = state;
}
void OrderAddRecord::setCurrentState(const int state)
{
this->currentState = state;
}
void OrderAddRecord::addArticles(const struct article Article)
{
this->articles << Article;
}
void OrderAddRecord::addArticles(const QString description, const QString nr, const QString customization, const float price, const int delivered, const int ordered, const QDate &warrentyDate)
{
article tmpArticle;
tmpArticle.description = description;
tmpArticle.nr = nr;
tmpArticle.customization = customization;
tmpArticle.price = price;
tmpArticle.delivered = delivered;
tmpArticle.ordered = ordered;
tmpArticle.warrentyDate = new QDate();
tmpArticle.warrentyDate = warrentyDate;
this->articles << tmpArticle;
}
And this is the error I get over and over again.
warning: direct base 'QObject' inaccessible in 'OrderAddRecord' due to ambiguity
error: cannot convert 'const QDate' to 'QDate*' in assignment
error: no 'void OrderAddRecord::addArticles(article)' member function declared in class 'OrderAddRecord'
error: no match for 'operator<<' in '((OrderAddRecord*)this)->OrderAddRecord::articles << Article'
error: prototype for 'void OrderAddRecord::addArticles(QString, QString, QString, float, int, int, const QDate&)' does not match any in class 'OrderAddRecord'
error: candidate is: void OrderAddRecord::addArticles(article)
error: cannot convert 'const QDate' to 'QDate*' in assignment
error: no match for 'operator<<' in '((OrderAddRecord*)this)->OrderAddRecord::articles << tmpArticle'
So I'm doing something terrible wrong.
After I changed the warrentyDate to *warrentyDate in the structure definition I got an error less to worry about.
So I assume that QDate variables has to be an pointer, but how can I copy the QDate passed in the function to the local warrentyDate or deadline variable.
And I can't get the structure working in the function, does somebody know how to pass structures as arguments in a function?
Many thanks,
Cyberboy