【问题标题】:Can't create QList with custom class无法使用自定义类创建 QList
【发布时间】:2015-06-14 09:03:19
【问题描述】:

我正在尝试创建自定义类对象的 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

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

【问题讨论】:

  • 确保 book.h 和 date.h 不包含 read.h 或 user.h 或任何其他导致循环依赖的内容。

标签: c++ qt qlist


【解决方案1】:

...\user.h(13) : error C2065: 'Read' : undeclared identifier

看起来在 user.h 中 Read 是未知的。 也许 date.h 或 book.h 也包括 user.h ? (循环引用)

使用prototype classes 可以帮助防止这种情况发生。

【讨论】:

  • 可能解决了这个问题。我删除了一些用户字段,将其更改为 int 字段(userID),这样它就可以工作了。谢谢!
【解决方案2】:

来自docs

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

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

【讨论】:

  • 我将它添加到了 Read 类,但它仍然无法正常工作。
猜你喜欢
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多