c++ - Converting strings to pointers -


i'm trying convert pointer string, , string pointer (lexical casting) using following code. conversion pointer string works fine, not other way round.

why happen? there other way can convert string pointer?

i'm not worried errors caused incorrect format of string. string i'm trying convert pointer generated converting pointer string.

here's code:

//tb_converttostring.cpp  #include<iostream> #include<cstdio> #include<sstream> #include<string>  //functions convert data types , strings    template <typename t> std::string tostring ( t number ) {     std::stringstream ss;     ss << number;     return ss.str(); };  template <typename t>  t fromstring ( const std::string &text ) {     std::stringstream ss(text);     t result;     ss >> result;     return result; } //-------------------------------------------------   using namespace std;  int main() {     int =10;       int* p1 = &a;     // works------------     string s1 = tostring<int *>(p1);     printf("\n ptr: %s",s1.c_str());     //----------------------      //this gives compilation errors -----     //int * p2 = fromstring<int *>(s1);     //printf("\n ptr: %p",p2);     //----------------------       cout<<"\n\n";     return 0; }; 

un-commenting problem section gives following compilation errors:

nehak@marvin:~/desktop$ g++ tb_converttostring.cpp  tb_converttostring.cpp: in function ‘t fromstring(const string&) [with t = int*, std::string = std::basic_string<char>]’: tb_converttostring.cpp:39:33:   instantiated here tb_converttostring.cpp:21:2: error: no match ‘operator>>’ in ‘ss >> result’ tb_converttostring.cpp:21:2: note: candidates are: /usr/include/c++/4.6/istream:122:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(std::basic_istream<_chart, _traits>::__istream_type& (*)(std::basic_istream<_chart, _traits>::__istream_type&)) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:122:7: note:   no known conversion argument 1 ‘int*’ ‘std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&) {aka std::basic_istream<char>& (*)(std::basic_istream<char>&)}’ /usr/include/c++/4.6/istream:126:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(std::basic_istream<_chart, _traits>::__ios_type& (*)(std::basic_istream<_chart, _traits>::__ios_type&)) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>, std::basic_istream<_chart, _traits>::__ios_type = std::basic_ios<char>] /usr/include/c++/4.6/istream:126:7: note:   no known conversion argument 1 ‘int*’ ‘std::basic_istream<char>::__ios_type& (*)(std::basic_istream<char>::__ios_type&) {aka std::basic_ios<char>& (*)(std::basic_ios<char>&)}’ /usr/include/c++/4.6/istream:133:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:133:7: note:   no known conversion argument 1 ‘int*’ ‘std::ios_base& (*)(std::ios_base&)’ /usr/include/c++/4.6/istream:169:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(bool&) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:169:7: note:   no known conversion argument 1 ‘int*’ ‘bool&’ /usr/include/c++/4.6/istream:173:7: note: std::basic_istream<_chart, _traits>& std::basic_istream<_chart, _traits>::operator>>(short int&) [with _chart = char, _traits = std::char_traits<char>] /usr/include/c++/4.6/istream:173:7: note:   no known conversion argument 1 ‘int*’ ‘short int&’ /usr/include/c++/4.6/istream:176:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(short unsigned int&) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:176:7: note:   no known conversion argument 1 ‘int*’ ‘short unsigned int&’ /usr/include/c++/4.6/istream:180:7: note: std::basic_istream<_chart, _traits>& std::basic_istream<_chart, _traits>::operator>>(int&) [with _chart = char, _traits = std::char_traits<char>] /usr/include/c++/4.6/istream:180:7: note:   no known conversion argument 1 ‘int*’ ‘int&’ /usr/include/c++/4.6/istream:183:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(unsigned int&) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:183:7: note:   no known conversion argument 1 ‘int*’ ‘unsigned int&’ /usr/include/c++/4.6/istream:187:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(long int&) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:187:7: note:   no known conversion argument 1 ‘int*’ ‘long int&’ /usr/include/c++/4.6/istream:191:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(long unsigned int&) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:191:7: note:   no known conversion argument 1 ‘int*’ ‘long unsigned int&’ /usr/include/c++/4.6/istream:196:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(long long int&) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:196:7: note:   no known conversion argument 1 ‘int*’ ‘long long int&’ /usr/include/c++/4.6/istream:200:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(long long unsigned int&) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:200:7: note:   no known conversion argument 1 ‘int*’ ‘long long unsigned int&’ /usr/include/c++/4.6/istream:205:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(float&) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:205:7: note:   no known conversion argument 1 ‘int*’ ‘float&’ /usr/include/c++/4.6/istream:209:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(double&) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:209:7: note:   no known conversion argument 1 ‘int*’ ‘double&’ /usr/include/c++/4.6/istream:213:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(long double&) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:213:7: note:   no known conversion argument 1 ‘int*’ ‘long double&’ /usr/include/c++/4.6/istream:217:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(void*&) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] /usr/include/c++/4.6/istream:217:7: note:   no known conversion argument 1 ‘int*’ ‘void*&’ /usr/include/c++/4.6/istream:241:7: note: std::basic_istream<_chart, _traits>& std::basic_istream<_chart, _traits>::operator>>(std::basic_istream<_chart, _traits>::__streambuf_type*) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__streambuf_type = std::basic_streambuf<char>] /usr/include/c++/4.6/istream:241:7: note:   no known conversion argument 1 ‘int*’ ‘std::basic_istream<char>::__streambuf_type* {aka std::basic_streambuf<char>*}’ /usr/include/c++/4.6/bits/basic_string.tcc:998:5: note: template<class _chart, class _traits, class _alloc> std::basic_istream<_chart, _traits>& std::operator>>(std::basic_istream<_chart, _traits>&, std::basic_string<_chart, _traits, _alloc>&) /usr/include/c++/4.6/bits/istream.tcc:957:5: note: template<class _chart2, class _traits2> std::basic_istream<_chart, _traits>& std::operator>>(std::basic_istream<_chart, _traits>&, _chart2*) /usr/include/c++/4.6/bits/istream.tcc:925:5: note: template<class _chart, class _traits> std::basic_istream<_chart, _traits>& std::operator>>(std::basic_istream<_chart, _traits>&, _chart&) /usr/include/c++/4.6/istream:709:5: note: template<class _traits> std::basic_istream<char, _traits>& std::operator>>(std::basic_istream<char, _traits>&, unsigned char&) /usr/include/c++/4.6/istream:714:5: note: template<class _traits> std::basic_istream<char, _traits>& std::operator>>(std::basic_istream<char, _traits>&, signed char&) /usr/include/c++/4.6/istream:756:5: note: template<class _traits> std::basic_istream<char, _traits>& std::operator>>(std::basic_istream<char, _traits>&, unsigned char*) /usr/include/c++/4.6/istream:761:5: note: template<class _traits> std::basic_istream<char, _traits>& std::operator>>(std::basic_istream<char, _traits>&, signed char*) nehak@marvin:~/desktop$  

the problem type of pointer can implicit cast void*, void* can not cast type of pointer. in case should specialize fromstring function pointers. this

template <typename t>  t fromstring ( const std::string &text,     std::enable_if< ! std::is_pointer< t >::value >::type * = nullptr ) {     std::stringstream ss(text);     t result;     ss >> result;     return result; }  template <typename t>  t fromstring ( const std::string &text,     std::enable_if< std::is_pointer< t >::value >::type * = nullptr ) {     std::stringstream ss(text);     void * result;     ss >> result;     return (t)result; } 

Comments

Popular posts from this blog

android - Why am I getting the message 'Youractivity.java is not an activity subclass or alias' -

python - How do I create a list index that loops through integers in another list -

c# - “System.Security.Cryptography.CryptographicException: Keyset does not exist” when reading private key from remote machine -