gpt4 book ai didi

c++ - 类未在范围内声明 - 即使包含 .h

转载 作者:太空狗 更新时间:2023-10-29 21:17:07 24 4
gpt4 key购买 nike

我是 c++ 的新手,遇到了一个奇怪的问题,

我收到“ToDoItem 未在此范围内声明”但我已经包含了 todoitem.h 文件

错误在这个类定义中:

#ifndef ITEMMONITOR_H
#define ITEMMONITOR_H

#include <QObject>
#include <QPointer>
#include <QTimer>
#include "todoitem.h"

class ItemMonitor : public QObject{
Q_OBJECT

signals:
void finished();

public:
explicit ItemMonitor(std::vector< QPointer<ToDoItem> >& items_);

private:
std::vector< QPointer<ToDoItem> >& items;
bool shouldRun;

public slots:
void beginMonitoring();
void finishUp();
};

#endif // ITEMMONITOR_H

tod​​oitem.h 是:

#ifndef TODOITEM_H
#define TODOITEM_H


#include <string>
#include <QString>
#include <QPushButton>
#include <QFrame>
#include <QDateTime>
#include "todolist.h"


namespace Ui {
class ToDoItem;
}

class ToDoItem : public QFrame{
Q_OBJECT

public:
//constructor and destructor
explicit ToDoItem(QFrame *parent = 0);
~ToDoItem();

//functions
void setValues(QString mainText_, // sets all import
QString additionalText_,
QDateTime dateTime_,
bool hasDeadline_);
void paintEvent(QPaintEvent *pe); //added to support stylesheets
void setDeadline(QDateTime deadline_);
QDateTime getDeadline();
bool getHasDeadline();
void setId(int id_);
int getId();
void setSecsTillDeadline();
int getSecsTillDeadline();
bool getSorted();
void setSorted(bool sorted_);
QString getMainText();
private:
QString formatTime(int duration_);
Ui::ToDoItem *ui;
int id;
QDateTime deadline;
bool hasDeadline;
int secsTillDeadline;
bool sorted; // set to true only during the sorting process
};

#endif // TODOITEM_H

最佳答案

常见的循环包含问题发生在:
啊啊

#ifndef A_H
#define A_H
#include "b.h"
// do something requiring content from b.h
#endif

b.h

#ifndef B_H
#define B_H
#include "a.h"
// whatever
#endif

如果某些 cpp 包含“a.h”,您可能会侥幸逃脱(如果 b.h 并不真的需要 a.h)。但是,如果该 cpp 改为包含 b.h,则 b.h 包含 a.h BEFORE 声明 a.h 所需的内容。然后 a.h 尝试包含 b.h 但 include guard 阻止了它,因此编译器在没有 b.h 的声明的情况下处理 a.h 并失败。

这个常见问题通常被另一层掩盖,就像在您的示例中一样:todoitem.h 包含“todolist.h”,即使它并不真正需要它,然后“todolist.h”包含“intemmonitor.h”。 h"需要 "todoitem.h"但由于包含防护而未能包含它。

关于c++ - 类未在范围内声明 - 即使包含 .h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33650408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com