2012-06-29 37 views
0

类TcpTahoe是类套接字的子类。 看http://www.nsnam.org/doxygen/classns3_1_1_tcp_tahoe.html (我想模拟一个小型网络。)动态投射智能指针

代码:运行时

Ptr<Socket> ns3TcpSocket; 
... 
Ptr<TcpTahoe> ptr = dynamic_cast< Ptr<TcpTahoe> >(ns3TcpSocket); 
uint32_t ssthresh = ptr->GetSSThresh2(); 
cout << ssthresh; 

所以我现在,ns3TcpSocket将是一个TcpTahoeSocket。 但我收到一个编译错误。

问候

+0

作为StackOverflow的常规用户,您可能已经知道SO是一个问答网站。你可能没有意识到你的帖子没有任何问题。你有具体的问题吗? –

+0

对不起,我认为我的问题是显而易见的。我的问题是,为什么我得到编译错误?我的代码中的问题在哪里? – user1324258

+0

请修改您的帖子以反映您的问题,并请包括错误消息的* exact *文本。 (当我编译代码时,我收到了很多错误,但我敢打赌,你有一个特定的错误信息。) –

回答

1

dynamic_cast可以用来转换成任一指针或引用。在你的情况下,Ptr<TcpTahoe>既不是。你应该在这里使用原始指针。我不知道Ptr类,但这些方针的东西应该工作:

Ptr<TcpTahoe> ptr = dynamic_cast<TcpTahoe*>(ns3TcpSocket->GetRawPtr()); 

GetRawPtr()是编造的,当然大多数机会Ptroperator&会做的伎俩,如果存在)。

哦,并且记住dynamic_cast可能会返回NULL如果转换无法完成。确保你对待这种情况。

+0

啊,好吧,我发现了这样一个功能,但它也不起作用。你可以看看http://www.nsnam.org/doxygen/classns3_1_1_ptr.html#details这是Ptr类。我试过dynamic_cast >(PeekPointer(ns3TcpSocket)); – user1324258

+0

尝试'Ptr ptr(dynamic_cast (ns3TcpSocket-> PeekPointer())'。使用'PeekPointer'时请考虑引用计数问题,这个时间对我来说太迟了...... – eran

+0

抱歉忘记了我的最后一条评论, “我不期望这dynamic_cast ,我期待这dynamic_cast > – user1324258