Hallo,
ich habe ein kleines Problem... ich sollte zu einer Vorgegeben funktion void f ein template schreiben, welches beliebige Typen umwandeln kann.. jedoch werden die Typen (X, Y, answer) in meiner Funktion nicht referenziert... heißt dass, das meine Templates falsch sind? Ich was vergessen habe? Oder kommt dass nur, weil sie nicht benutzt werden?
das ist meine Klassen.. erste die Templates.. dann die Spezialisierungen und unten die Funktion void f, in der die Warnungen auftreten:
Alles anzeigen
Warnungen für die void f:
warning C4189: 'xx': Lokale Variable ist initialisiert aber nicht referenziert
warning C4189: 'answer': Lokale Variable ist initialisiert aber nicht referenziert
warning C4189: 'yy': Lokale Variable ist initialisiert aber nicht referenziert
Soo.. hier nochmal die Klassen X und Y.. sie sind auch schon vorgegeben gewesen:
Alles anzeigen
Alles anzeigen
Danke schonmal, für jeden Hinsweis
LG.July
ich habe ein kleines Problem... ich sollte zu einer Vorgegeben funktion void f ein template schreiben, welches beliebige Typen umwandeln kann.. jedoch werden die Typen (X, Y, answer) in meiner Funktion nicht referenziert... heißt dass, das meine Templates falsch sind? Ich was vergessen habe? Oder kommt dass nur, weil sie nicht benutzt werden?
das ist meine Klassen.. erste die Templates.. dann die Spezialisierungen und unten die Funktion void f, in der die Warnungen auftreten:
Quellcode
- #include <exception>
- #include <sstream>
- #include "y.h"
- #include "x.h"
- //gibt To explizit an
- template <typename To, typename From> To stream_cast(From input)
- {
- std::stringstream str;
- str << input;
- To output;
- str >> output;
- if(str == false)
- throw std::bad_cast("bad stream_cast");
- return output;
- }
- //Spezialisierung für gleiche Typen
- template<typename To> To stream_cast(const To &input)
- {
- return input;
- }
- //Spezialisierung string in char* -> wird nicht umgewandelt, input wird zurückgegeben
- template<> std::string stream_cast(const char* input)
- {
- return input;
- }
- //Spezialisierung char* in string -> wird nicht umgewandelt, input wird zurückgegeben
- template<> const char* const stream_cast(std::string input)
- {
- //c_str() gibt den string als const char * zurück
- return input.c_str();
- }
- //X und Y sind gegeben
- class X;
- std::ostream& operator<<(std::ostream&,const X&);
- std::istream& operator>>(std::istream&,X&);
- class Y;
- std::ostream& operator<<(std::ostream&,const Y&);
- std::istream& operator>>(std::istream&,Y&);
- //Funktion f ist gegeben
- void f( const std::string& intstr, const X& x , const Y& y )
- {
- int answer = stream_cast<int>(intstr);//<int> da cast zu int - 12
- const std::string& str = stream_cast<std::string>(x);//5 cast zu string
- const X& xx = stream_cast<X>(str);//string 5 cast zu X 5
- const std::string& str2 = stream_cast<std::string>(y); //4 und 5.0 zu string
- const Y& yy = stream_cast<Y>(str2);//str2 zurück in Y 4 und Y 5.0
- }
Warnungen für die void f:
warning C4189: 'xx': Lokale Variable ist initialisiert aber nicht referenziert
warning C4189: 'answer': Lokale Variable ist initialisiert aber nicht referenziert
warning C4189: 'yy': Lokale Variable ist initialisiert aber nicht referenziert
Soo.. hier nochmal die Klassen X und Y.. sie sind auch schon vorgegeben gewesen:
Quellcode
- #include <istream>
- #include <ostream>
- class X {
- public:
- X() : i_() {}
- X(int i) : i_(i) {}
- int get_int() const {return i_;}
- int & get_int() {return i_;}
- private:
- int i_;
- };
- inline std::ostream& operator<<(std::ostream& os, const X& x)
- {
- os << x.get_int();
- return os;
- }
- inline std::istream& operator>>(std::istream& is, X& x)
- {
- is >> x.get_int();
- return is;
- }
Quellcode
- #include <istream>
- #include <ostream>
- class Y {
- public:
- Y() : i_(), d_() {}
- Y(int i, double d) : i_(i), d_(d) {}
- int get_int () const {return i_;}
- double get_double() const {return d_;}
- int & get_int () {return i_;}
- double& get_double() {return d_;}
- private:
- int i_;
- double d_;
- };
- inline std::ostream& operator<<(std::ostream& os, const Y& y)
- {
- os << y.get_int() << ' ' << y.get_double();
- return os;
- }
- inline std::istream& operator>>(std::istream& is, Y& y)
- {
- is >> y.get_int() >> y.get_double();
- return is;
- }
Danke schonmal, für jeden Hinsweis
LG.July
Forza Italia!!!!!!