C++ 在{标记之前应为类名

C++ 在{标记之前应为类名,c++,inheritance,C++,Inheritance,这是两个头文件。子文件和父文件。有人能解释为什么会发生此错误吗 提前谢谢 SampleApplication.h: #ifndef SAMPLEAPPLICATION_H_ #define SAMPLEAPPLICATION_H_ #include "ns3/CcnModule.h" #include "ns3/CCN_Name.h" #include <string> class CcnModule; class SampleApplication : public ns3:

这是两个头文件。子文件和父文件。有人能解释为什么会发生此错误吗

提前谢谢

SampleApplication.h:

#ifndef SAMPLEAPPLICATION_H_
#define SAMPLEAPPLICATION_H_

#include "ns3/CcnModule.h"
#include "ns3/CCN_Name.h"
#include <string>

class CcnModule;

class SampleApplication : public ns3::Application
{

   public:
    ns3::Ptr<CcnModule> ccnm;


    static ns3::TypeId GetTypeId(void);
    virtual ns3::TypeId GetInstanceTypeId (void) const;
    SampleApplication();
    SampleApplication(ns3::Ptr<CcnModule> ccnm);
    virtual ~SampleApplication();
    char* data;
    int length;
    ns3::Ptr<CCN_Name> dataName;
    void SendInterest(ns3::Ptr<CCN_Name> n);

    void SendData(ns3::Ptr<CCN_Name> data, char* buff, int bufflen);
    virtual void InterestReceived(ns3::Ptr<CCN_Name> ccnn);
    virtual void DataArrived(ns3::Ptr<CCN_Name> data, char* buff, int bufflen);

    void AnnounceName(ns3::Ptr<CCN_Name> n);

    virtual void DoDispose();
    virtual void DoInitialize();
};

#endif
#如果NDEF样本应用程序#_
#定义样本应用程序_
#包括“ns3/CcnModule.h”
#包括“ns3/CCN_Name.h”
#包括
类CcnModule;
类SampleApplication:public ns3::Application
{
公众:
ns3::Ptr-ccnm;
静态ns3::TypeId GetTypeId(void);
虚拟ns3::TypeId GetInstanceTypeId(void)常量;
SampleApplication();
样本应用(ns3::Ptr ccnm);
虚拟~SampleApplication();
字符*数据;
整数长度;
ns3::Ptr数据名;
无效利息(ns3::Ptr n);
void SendData(ns3::Ptr data,char*buff,int bufflen);
收到的虚拟无效权益(ns3::Ptr ccnn);
虚拟无效数据到达(ns3::Ptr数据、字符*buff、整数bufflen);
无效名称(ns3::Ptr n);
虚空DoDispose();
虚拟void DoInitialize();
};
#恩迪夫
接收人:h:

#ifndef RECEIVER_H_
#define RECEIVER_H_


#include "ns3/CcnModule.h"
#include "ns3/CCN_Name.h"
#include <string>
#include <vector>
#include "ns3/SampleApplication.h"


class CcnModule;
//class SampleApplication;

class Receiver : SampleApplication
{

   public:

    static ns3::TypeId GetTypeId(void);
    virtual ns3::TypeId GetInstanceTypeId (void) const;
    Receiver(ns3::Ptr<CcnModule> ccnm);

    virtual ~Receiver();

    void SendInterest(ns3::Ptr<CCN_Name> n);

    virtual void DataArrived(ns3::Ptr<CCN_Name> data, char* buff, int bufflen);
};

#endif
\ifndef接收机_
#定义接收器_
#包括“ns3/CcnModule.h”
#包括“ns3/CCN_Name.h”
#包括
#包括
#包括“ns3/SampleApplication.h”
类CcnModule;
//类样本应用;

类接收器:SampleApplication { 公众: 静态ns3::TypeId GetTypeId(void); 虚拟ns3::TypeId GetInstanceTypeId(void)常量; 接收机(ns3::Ptr ccnm); 虚拟接收机(); 无效利息(ns3::Ptr n); 虚拟无效数据到达(ns3::Ptr数据、字符*buff、整数bufflen); }; #恩迪夫
我不熟悉您正在使用的库,但我猜它是NS-3离散事件网络模拟器,粗略地看一下API,我希望看到包括

#include "ns3/application.h"
在SampleApplication.h文件中


很可能它已经被您的实现中的一些其他include拉入,但乍一看它似乎丢失了。

此错误发生在哪一行?class Receiver:SampleApplication{在这里,好像SampleApplication不是一个类。这基本上意味着,
SampleApplication
没有被识别为一个类型。这意味着头文件的包含有一些问题。要么你有一个循环依赖项(因此在你使用它的时候它是不可见的)或者它位于嵌套的命名空间中且不可见。您能否将其简化为再现问题的小型可编译示例。如果
SampleApplication
不在ns3
命名空间中(如下面的注释所述),那么include为什么看起来像这样?
#include“ns3/SampleApplication.h”
(请注意此处的ns3)@LokiAstari我对该评论投了赞成票,但同时我想知道,如果缺少
ns3/SampleApplication.h
头文件(除非OP将其存储在那里,否则这不是最明智的做法),预处理器怎么会不会吐到该头文件上。OP正向声明
CcnModule
,即使上面显示的是正确的
ns3/CcnModule.h
头包含,这一事实使我相信问题更为根本。