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
Qt Code:
  1. #ifndef ORDERRECORD_H
  2. #define ORDERRECORD_H
  3.  
  4. #include <QObject>
  5.  
  6. class QDate;
  7. class QString;
  8.  
  9. struct article {
  10. QString description, customization, nr;
  11. int ordered, delivered;
  12. float price;
  13. QDate *warrentyDate;
  14. };
  15.  
  16. class OrderRecord : public QObject
  17. {
  18. Q_OBJECT
  19. public:
  20. //set methods
  21. virtual void setOrderId(const int);
  22. virtual void setCid(const int);
  23. virtual void setDeadline(const QDate );
  24. virtual void setPrepayment(const float);
  25. virtual void setPreviousState(const int);
  26. virtual void setCurrentState(const int);
  27. virtual void addArticle(const QString, const QString, const QString, const float, const int, const int, const QDate);
  28. virtual void addArticle(const struct article);
  29.  
  30. //accessors
  31. virtual int getOrderId();
  32. virtual int getCid();
  33. virtual QDate getDeadline();
  34. virtual float getPrepayment();
  35. virtual int getPreviousState();
  36. virtual int getCurrentState();
  37. virtual article getArticle(int);
  38.  
  39. };
  40.  
  41. #endif
To copy to clipboard, switch view to plain text mode 

This is orderAddRecord.h
Qt Code:
  1. #ifndef ORDERADDRECORD_H
  2. #define ORDERADDRECORD_H
  3.  
  4. #include <QObject>
  5. #include <QWidget>
  6.  
  7. #include "AbstractOrderRecord.h"
  8.  
  9. class QDate;
  10.  
  11. class OrderAddRecord : public QObject, public virtual OrderRecord {
  12. Q_OBJECT
  13. public:
  14. OrderAddRecord(QWidget *parent = 0);
  15. void setOrderId(const int);
  16. void setCid(const int);
  17. void setDeadline(const QDate);
  18. void setPrepayment(const float);
  19. void setPreviousState(const int);
  20. void setCurrentState(const int);
  21. void addArticle(const struct article);
  22. void addArticle(const QString, const QString, const QString, const float, const int, const int, const QDate);
  23.  
  24. private:
  25. int orderId;
  26. int cid;
  27. QDate *deadline;
  28. float prepayment;
  29. int previousState;
  30. int currentState;
  31. QStringList *articles;
  32. };
  33.  
  34. #endif
To copy to clipboard, switch view to plain text mode 

This is orderAddRecord.cpp
Qt Code:
  1. #include "orderAddRecord.h"
  2. #include <QtCore>
  3.  
  4.  
  5.  
  6. OrderAddRecord::OrderAddRecord(QWidget *parent)
  7. : QObject(parent)
  8. {
  9. this->deadline = new QDate();
  10. this->articles = new QStringList();
  11. }
  12.  
  13. void OrderAddRecord::setOrderId(const int orderId)
  14. {
  15. this->orderId = orderId;
  16. }
  17.  
  18. void OrderAddRecord::setCid(const int cid)
  19. {
  20. this->cid = cid;
  21. }
  22.  
  23. void OrderAddRecord::setDeadline(const QDate deadline)
  24. {
  25. this->deadline = deadline;
  26. }
  27.  
  28. void OrderAddRecord::setPrepayment(const float amount)
  29. {
  30. this->prepayment = amount;
  31. }
  32.  
  33. void OrderAddRecord::setPreviousState(const int state)
  34. {
  35. this->previousState = state;
  36. }
  37.  
  38. void OrderAddRecord::setCurrentState(const int state)
  39. {
  40. this->currentState = state;
  41. }
  42.  
  43. void OrderAddRecord::addArticles(const struct article Article)
  44. {
  45. this->articles << Article;
  46. }
  47.  
  48. void OrderAddRecord::addArticles(const QString description, const QString nr, const QString customization, const float price, const int delivered, const int ordered, const QDate &warrentyDate)
  49. {
  50. article tmpArticle;
  51. tmpArticle.description = description;
  52. tmpArticle.nr = nr;
  53. tmpArticle.customization = customization;
  54. tmpArticle.price = price;
  55. tmpArticle.delivered = delivered;
  56. tmpArticle.ordered = ordered;
  57. tmpArticle.warrentyDate = new QDate();
  58. tmpArticle.warrentyDate = warrentyDate;
  59.  
  60. this->articles << tmpArticle;
  61.  
  62. }
To copy to clipboard, switch view to plain text mode 

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