我的代码有问题。编译器一直显示我创建的每个CButton指针都有此错误。
/home/trafel/ドキュメント/Projects/C++/CCalc/ccalc.h:23: error : 'CButton' does not name a type
CButton *button_0;
^CButton类从QPushButton扩展而来。以下是主标题的代码:
#ifndef CCALC_H
#define CCALC_H
#include <QWidget>
#include <QMainWindow>
#include <QPushButton>
#include "clabel.h"
#include "cbutton.h"
class CCalc : public QMainWindow
{
Q_OBJECT
public:
CCalc();
~CCalc();
public slots:
void CPush(QString);
void CAction(QString);
private:
CButton *button_0;
CButton *button_1;
CButton *button_2;
CButton *button_3;
CButton *button_4;
CButton *button_5;
CButton *button_6;
CButton *button_7;
CButton *button_8;
CButton *button_9;
CButton *button_equal;
CButton *button_plus;
CButton *button_minus;
CButton *button_multiply;
CButton *button_divide;
CButton *button_power;
CButton *button_root;
CButton *button_leftParenthesis;
CButton *button_rightParenthesis;
CButton *button_return;
CButton *button_ce;
CLabel *label_input;
CLabel *label_output;
QMenu *menu_session;
QAction *session_new;
QAction *session_open;
QAction *session_save;
QAction *session_quit;
QMenu *menu_log;
QAction *log_inspect;
QMenu *menu_help;
QAction *help_help;
QAction *help_about;
};
#endif // CCALC_H这是来自CButton类头的:
#ifndef CBUTTON_H
#define CBUTTON_H
#include <QPushButton>
#include "ccalc.h"
class CButton : public QPushButton
{
Q_OBJECT
public:
CButton(QWidget *parent);
~CButton();
QString getValue();
void setValue(QString string);
private:
QString value;
};
#endif // CBUTTON_H我忘了加什么东西了吗?
发布于 2016-05-28 03:56:04
简短解决方案:
在文件"cbutton.h"中替换:
#include "ccalc.h"通过以下方式:
class CCalc;或者完全删除该#include,因为看起来您无论如何都不使用它。
解释:
注意,您有循环依赖关系:在"ccalc.h"中,您需要知道CButton是什么,而在"cbutton.h"中,您需要知道CCalc是什么。
这意味着,如果首先解析"cbutton.h",您将按以下顺序点击这些行(只显示相关行):
1. #define CBUTTON_H <-- from file "cbutton.h"
2. #include "ccalc.h" <-- from file "cbutton.h"
3. #include "cbutton.h" <-- from file "ccalc.h", but as CBUTTON_H is already defined, the content of this file is ignored.
4. CButton *button_0; <-- from file "ccalc.h", which indeed refers to an undefined class, as we have not reached the line "class CButton" yet.这些情况下的解决方案是,如果在"ccalc.h"中不需要知道"cubutton.h"中的方法,而只需要知道类的存在,就可以用类原型class CButton;替换包含的方法。#include "clabel.h"和#include "clabel.h"也是如此。
https://stackoverflow.com/questions/37494951
复制相似问题