C ++使用在类定义中声明的变量在同一个类定义中声明一个不同的变量

时间:2015-02-05 08:39:53

标签: c++

我正在使用基于C ++的Omnet ++进行网络模拟。我正在尝试使用以下代码为某个模块定义一个类:

#ifndef __PROJECT_IMS_SLF_H_
#define __PROJECT_IMS_SLF_H_

#include <omnetpp.h>
#include "mDIAMETER_m.h"
#include "IPPacket_m.h"

class SLF : public cSimpleModule
{
  public:
    mDIAMETER *generateDIAMETERmsg(const char* name, long userID, bool registered, std::string server);
    IPPacket *generateIPPacket(int srcIP,int desIP);
  protected:
    virtual void initialize();
    virtual void handleMessage(cMessage *msg);
  private:
    int MyIP;
    int N = par("N");
    struct Registry {
            long UserID;
            bool Registered;
            std::string Server;
        };
    struct Registry MyReg[N];   // Create a Registry Table for all UEs

};



#endif

我收到以下错误:&#34;无效使用非静态数据成员SLF :: N&#34;。我知道我在类定义中将N声明为私有变量,但我必须这样做,因为N是与模块相关的参数,它被定义为类SLF的一个实例,并且从配置中读取该模块使用OMNET ++定义的函数&#34; par&#34;。

如果我在initialize函数中声明MyReg[N]它可以工作,但问题是我需要在另一个函数(handleMessage)中使用这个变量。任何提示?

提前致谢!

2 个答案:

答案 0 :(得分:1)

在堆上分配数组:

class SLF /* etc. */
{
    /* etc. */

    virtual void initialize()
    {
        /* etc. */

        N = par("N");
        MyReg = new Registry[N];

        /* etc. */
    }

    /* etc. */

    int N;

    /* etc. */

    struct Registry *MyReg;
}

请务必删除析构函数中的内存。

答案 1 :(得分:0)

问题解决如下:

  • 首先,定义指向此结构实例的指针:

struct Registry *MyReg;

现在在模块内部,在initialize函数中,可以读取N并且可以使用其大小声明结构的实例:

int N = par("N");
this->MyReg = new struct Registry[N];    

我还在头文件中定义了一个完成模块,并在该函数中删除了MyReg。