expected class-name before ‘{’ token

碰到过几次这类问题,但是那时也不知道是怎么弄好的,最近在一些帖子,找到了办法,

就是在头文件里,将include "xxx.h"文件注释掉,换成声明,在.cpp文件里使用include "xxx.h"。

具体参考:

http://stackoverflow.com/questions/7199809/expected-class-name-before-token

http://stackoverflow.com/questions/3632818/forward-declaration-vs-include

举例说明:

文件1 cbase.h

#ifndef CBASE_H
#define CBASE_H

#include <QObject>
#include "ctree.h"

class CBase : public QObject
{
    Q_OBJECT
public:
    explicit CBase(QObject *parent = 0);
    CTree *  tree;
signals:

public slots:
};

#endif // CBASE_H

文件2  cmain.h

#ifndef CMAIN_H
#define CMAIN_H

#include <QObject>
#include "cbase.h"
class CMain : public CBase
{
    Q_OBJECT
public:
    explicit CMain(QObject *parent = 0);
signals:

public slots:
};

#endif // CMAIN_H

文件3  ctree.h

#ifndef CTREE_H
#define CTREE_H

#include <QObject>
#include "cbase.h"
#include "cmain.h"

class CTree : public QObject
{
    Q_OBJECT
public:
    explicit CTree(QObject *parent = 0);
    CBase * bs;
    CMain * mnt;
signals:

public slots:
};

#endif // CTREE_H


便以结果:
In file included from ctree.h:6:0,
                 from cbase.h:5,
                 from cbase.cpp:1:
cmain.h:8:1: error: expected class-name before ‘{’ token


多个文件相互嵌套包含时,会提示:expected class-name before ‘{’ token,

有时即使头文件里添加了#ifndef XX #define XX;还是没用,


解决方法:在文件3  ctree.h添加类说明

class CBase;
class CMain;

,注释掉include


#ifndef CTREE_H
#define CTREE_H

#include <QObject>

//#include "cbase.h"
//#include "cmain.h"
class CBase;
class CMain;

class CTree : public QObject
{
    Q_OBJECT
public:
    explicit CTree(QObject *parent = 0);
    CBase * bs;
    CMain * mnt;
signals:

public slots:
};

#endif // CTREE_H




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值