首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[Qt]:'CButton‘没有命名类型

[Qt]:'CButton‘没有命名类型
EN

Stack Overflow用户
提问于 2016-05-28 03:37:25
回答 1查看 370关注 0票数 0

我的代码有问题。编译器一直显示我创建的每个CButton指针都有此错误。

代码语言:javascript
复制
/home/trafel/ドキュメント/Projects/C++/CCalc/ccalc.h:23: error : 'CButton' does not name a type
     CButton *button_0;
     ^

CButton类从QPushButton扩展而来。以下是主标题的代码:

代码语言:javascript
复制
#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类头的:

代码语言:javascript
复制
#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

我忘了加什么东西了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-28 03:56:04

简短解决方案:

在文件"cbutton.h"中替换:

代码语言:javascript
复制
#include "ccalc.h"

通过以下方式:

代码语言:javascript
复制
class CCalc;

或者完全删除该#include,因为看起来您无论如何都不使用它。

解释:

注意,您有循环依赖关系:在"ccalc.h"中,您需要知道CButton是什么,而在"cbutton.h"中,您需要知道CCalc是什么。

这意味着,如果首先解析"cbutton.h",您将按以下顺序点击这些行(只显示相关行):

代码语言:javascript
复制
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"也是如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37494951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档