2012-06-29 2 views
0

класс TcpTahoe - это подкласс класса socket. Посмотрите 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

Извините, я думал, что мой вопрос очевиден. Мой quistion, почему я получаю ошибку компиляции? Где проблема в моем коде? – user1324258

+0

Пожалуйста, отредактируйте ваше сообщение, чтобы отразить ваш вопрос, и укажите * точный текст сообщения об ошибке. (Я получаю много ошибок, когда компилирую этот код, но, я уверен, у вас есть специальное сообщение об ошибке.) –

ответ

1

dynamic_cast может быть использован для преобразования в любой указатель или ссылка. В вашем случае Ptr<TcpTahoe> не является ни тем, ни другим. Здесь вы должны использовать необработанный указатель. Я не знаю Ptr класс, но что-то вдоль этих линий должно работать:

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

(GetRawPtr() состоит, конечно, большинство шансов Ptr «s operator& будет делать трюк, если не существует.).

О, и имейте в виду, что dynamic_cast может вернуть NULL, если бросок не может быть выполнен. Убедитесь, что вы относитесь к этому делу.

+0

Ahh ok, и я нашел такую ​​функцию, но она тоже не работает. Не могли бы вы посмотреть на 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

Извините, забыл мой последний комментарий, он работает, i сделал ошибку копирования, но я не понимаю этого dynamic_cast , я ожидаю, что этот dynamic_cast > – user1324258

Смежные вопросы