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

sql - VB.NET Operand type clash: date is incompatible with int error -

SVG stroke-linecap doesn't work for circles in Firefox? -

python - TypeError: Scalar value for argument 'color' is not numeric in openCV -