无法使用自定义类创建 QList

Can't create QList with custom class

本文关键字:创建 QList 自定义      更新时间:2023-10-16

我正在尝试创建自定义类对象的QList,但是出现错误:

错误: C2923:"QList":"读取"不是参数"T"的有效模板类型参数

我的代码(用户标头):

#ifndef USER_H
#define USER_H
#include <QString>
#include <QList>
#include "read.h"
class User {
protected:
    int id;
    QString username;
    QString password;
    QList<Read> readBooks;
    bool accountDeleted;
    bool admin;
public:
    User();
    User(int id, QString username, QString password,
         QList<Read> readBooks, bool accountDeleted, bool admin);
    ~User();
    const int getId();
    void setId(int id);
    const QString getUsername();
    void setUsername(QString username);
    const QString getPassword();
    void setPassword(QString password);
    const QList<Read> getReadBooks();
    void setReadBooks(QList<Read> readBooks);
    const bool isAccountDeleted();
    void setAccountDeleted(bool accountDeleted);
    const bool isAdmin();
    void setAdmin(bool admin);
};
QDataStream &operator<<(QDataStream &out, const User &user);
QDataStream &operator>>(QDataStream &in, User &user);
#endif // USER_H

Qt给了我错误列表:

...user.h(13) : error C2065: 'Read' : undeclared identifier
...user.h(13) : error C2923: 'QList' : 'Read' is not a valid template type argument for parameter 'T'
...user.h(18) : error C2065: 'Read' : undeclared identifier
...user.h(18) : error C2923: 'QList' : 'Read' is not a valid template type argument for parameter 'T'
...user.h(27) : error C2065: 'Read' : undeclared identifier
...user.h(27) : error C2923: 'QList' : 'Read' is not a valid template type argument for parameter 'T'
...user.h(28) : error C2065: 'Read' : undeclared identifier
...user.h(28) : error C2923: 'QList' : 'Read' is not a valid template type argument for parameter 'T'

读取标头:

#ifndef READ_H
#define READ_H
#include <QDataStream>
#include "book.h"
#include "date.h"
class Read
{
protected:
    //Book book;
    Date addDate;
    Date readDate;
    bool stillReading;
public:
    Read();
    ~Read();
    //Read(Book book, Date addDate, Date readDate, bool stillReading);
    //Book getBook();
    //void setBook(Book book);
    Date getAddDate();
    void setAddDate(Date addDate);
    Date getReadDate();
    void setReadDate(Date readDate);
    bool isStillReading();
    void setStillReading(bool stillReading);
};
QDataStream &operator<<(QDataStream &out, const Read &read);
QDataStream &operator>>(QDataStream &in, Read &read);
#endif // READ_H

书被评论了,因为它也给出了错误...

...\user.h(13):错误 C2065:"读取":未声明的标识符

看起来在用户中不知道读取。也许date.h或book.h也包括user.h?(循环参考)

使用原型类可以帮助防止这种情况。

从文档中:

QList 的值类型必须是可分配的数据类型。

所以你需要一个复制构造函数。