我是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
和todoitem.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
h
#ifndef B_H
#define B_H
#include "a.h"
// whatever
#endif
如果某些cpp包含“ ah”,则您可能会忽略它(如果bh确实不需要ah)。但是,如果该cpp包含bh,则bh include ah,然后才声明ah所需的东西。然后ah尝试包含bh,但是include保护块阻止了该操作,因此编译器将处理ah而没有bh的声明,并且会失败。
常见的问题通常被另一层掩盖,例如您的示例:todoitem.h包含“ todolist.h”,即使它并不是真的需要它,然后“ todolist.h”包含“ intemmonitor.h”需要“ todoitem.h”,但由于包含保护而未能包含它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句