头文件类中的数组声明

时间:2014-01-08 04:01:38

标签: c++ arrays header declaration

我的模拟需要帮助。

首先提供在我的main.cc文件中创建网络数据包的初始语句。

 Ptr<Name> nameWithSequence = Create<Name> (m_interestName); //create value /prefix
 nameWithSequence->appendSeqNum (seq); //append sequence number to /prefix,eg - 0
 Ptr<Interest> interest = Create<Interest> (); //create packet
 interest->SetName                (nameWithSequence); //create name of packet as /prefix0

我想将网络数据包设置为在一个数据包中有两个由名称/prefix0/prefix1组成的值,所以〜相信数组很适合。

以下是我所做的更改

  Ptr<Name> nameWithSequence = Create<Name> (m_interestName); //create value /prefix
  nameWithSequence->appendSeqNum (seq); //append sequence number to /prefix,eg - 0
  Ptr<Name> nameWithNextSequence = Create<Name> (m_interestName); //create value /prefix
 nameWithNextSequence->appendSeqNum ((seq)+1)); //append next sequence number to /prefix,eg - 1

  Ptr<Interest> interest = Create<Interest> (); //create packet
  interest->SetName [0]                (nameWithSequence); //create name of packet as /prefix0
 interest->SetName [1]                (nameWithNextSequence); //create name of packet as /prefix1

它引用头文件如下:

/**
   * \brief Set interest name
   *
   * @param name smart pointer to Name
   *
   **/
  void
  SetName (Ptr<Name> name);

  /**
   * \brief Another variant to set interest name
   *
   * @param name const reference to Name object
   *
   **/
  void
  SetName (const Name &name);

以下代码摘自cc文件

Interest::Interest (Ptr<Packet> payload/* = Create<Packet> ()*/)
  : m_name ()

Interest::Interest (const Interest &interest)
  : m_name             (Create<Name> (interest.GetName ()))

void
Interest::SetName (Ptr<Name> name)
{
  m_name = name;
  m_wire = 0;
}

void
Interest::SetName (const Name &name)
{
  m_name = Create<Name> (name);
  m_wire = 0;
}

我相信我应该首先声明数组,但我不知道我应该在哪里放置声明,是cc还是标题或两者以及如何?我认为数组名称是SetName [2]。

请告知如何做到这一点。

1 个答案:

答案 0 :(得分:1)

用于创建数组的语法根本不符合您的想法。以下是获取两个名称而不是一个名称所需进行的更改。如果你想要可变数量的名字,那么你必须做一些不同的事情。

警告:此更改可能(可能会)导致编译错误和运行时错误。如果不知道你正在使用的库,就不可能说出去哪里以及怎样。要解决这个问题,您必须阅读该代码,了解其工作原理,并分析需要采取哪些措施来实现您想要的小改动。

无论如何,在这里。您尚未发布标题的关键部分,这是m_name的变量声明。)

我假设它看起来像这样:

Ptr<Name> m_name;

您必须将其更改为:

Ptr<Name> m_names [2];  // Note the change in name

然后,将函数声明(在标题中)更改为:

void SetName (unsigned which, Ptr<Name> name);
void SetName (unsigned which, const Name &name);

并相应地将源文件中的实现更改为:

void Interest::SetName (unsigned which, Ptr<Name> name)
{
    if (which < 2)
    {
        m_names[which] = name;
        m_wire = 0; // I don't know what this is.
    }
}

void Interest::SetName (unsigned which, const Name &name)
{
    if (which < 2)
    {
        m_names[which] = Create<Name> (name);
        m_wire = 0;
    }
}

你调用它的方式是这样的(在你的主文件中):

interest->SetName (0, nameWithSequence);
interest->SetName (1, nameWithNextSequence);

我所做的更改将导致您正在使用的代码的其他部分出现编译错误。这是一件好事。如果您能够有意义地智能地解决这些构建问题,那么这意味着您可能对您正在使用的系统进行了足够的了解,以对其进行细微更改。

祝你好运!