C ++在{Token。}之前无效使用不完整类型或预期的初始化程序

时间:2017-04-13 15:56:43

标签: c++ qt user-interface

我见过有同样问题的人,但解决方案对我不起作用,或者我误解了它。我的班级员工继承自我的班级客户,因为员工可以是客户,但他们有等级,用户名和密码。当我继承它告诉我无效使用不完整类型。但我已经尝试过解决方案,在我的派生类(员工)中我#include“customer.h”或者转发声明“class customer”。或者在我的employee.h文件中执行这两个操作,但是它告诉我这个错误,或者说在{之前的预期类名称 真的需要帮助

#ifndef CUSTOMER_H
#define CUSTOMER_H

#include "items.h"

class items;

class employee;

namespace Ui {
class customer;
}

class customer : public QMainWindow
{

    Q_OBJECT

public:
    explicit customer(QWidget *parent = 0);
    customer(int, QString, QString, QString, QDate, QString, QString, int, int, QString);

    ~customer();

    //START set and get functions
    void setID(int);
    int getID();

    void setFirstName(QString);
    QString getFirstName();

    void setLastName(QString);
    QString getLastName();

    void setGender(QString);
    QString getGender();

    void setDateOfBirth(QDate);
    QDate getDateOfBirth();

    void setStreet(QString);
    QString getStreet();

    void setTown(QString);
    QString getTown();

    void setDistrictID(int);
    int getDistrictID();

    void setContactNumber(int);
    int getContactNumber();

    void setEmail(QString);
    QString getEmail();
    //END set and get functions

    virtual void resetFields();

protected:
    Ui::customer *ui;


private slots:
    void on_pushButton_AddCustomer_clicked();

    void on_pushButton_Clear_clicked();

    void on_pushButton_ViewAllCustomers_clicked();

    void on_pushButton_AddEmployee_emp_clicked();


    void on_pushButton_Clear_emp_clicked();

    void on_buying_pushButton_clicked();

    void on_buying_pushButton_emp_clicked();

};

#endif // CUSTOMER_H


EMPLOYEE CLASS BELOW

#ifndef EMPLOYEE_H
#define EMPLOYEE_H


#include "ui_customer.h"
#include "database.h"

#include <QMainWindow>

#include "customer.h"
class customer;
class employee : public customer
{
    Q_OBJECT
public:

    employee(int, QString, QString, QString, QDate, QString, QString, int, int, QString, QString, QString, QString);

    void setRank(QString);
    QString getRank();

    void setUsername(QString);
    QString getUsername();

    void setPassword(QString);
    QString getPassword();

    virtual void resetFields();

};

#endif // EMPLOYEE_H

1 个答案:

答案 0 :(得分:1)

如果编译器不需要了解类型的大小或布局,则只能使用类型的前向声明。如果您具有指向前向声明类型的指针或引用,则会出现这种情况。如果您想要从类型实例化或继承,则不是这种情况。