我的模拟需要帮助。
首先提供在我的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]。
请告知如何做到这一点。
答案 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);
我所做的更改将导致您正在使用的代码的其他部分出现编译错误。这是一件好事。如果您能够有意义地智能地解决这些构建问题,那么这意味着您可能对您正在使用的系统进行了足够的了解,以对其进行细微更改。
祝你好运!