Dead_Rabbit Skrevet 14. september 2004 Del Skrevet 14. september 2004 (endret) Heisan! Driver å lager en kalkulator nå, den skal være litt mer enn en enkel +,-,* og / kalkulator(derfor har jeg laget en klasse), men dette er kun slik den er nå. //Calc.cpp #include <iostream> #include <cctype> template<class T> class Calc { //typedef: //Friends: friend template<T> std::ostream& operator<<(std::ostream&, const Calc<>&); friend template<T> std::istream& operator>>(std::istream&, Calc<T>&); friend template<T> Calc& operator+(Calc<T>&, Calc<T>&); friend template<T> Calc& operator-(Calc<T>&, Calc<T>&); friend template<T> Calc& operator*(Calc<T>&, Calc<T>&); friend template<T> Calc& operator/(Calc<T>&, Calc<T>&); public: Calc(): t(0) { } private: T t; }; //-------------------------------Functions-------------------------------------------------- template<class T> std::ostream& operator<<(std::ostream& os, const Calc<T>& v) { os << v.t; return os; } template<class T> std::istream& operator>>(std::istream& is, Calc<T>& v) { is.clear(); int a; while(is.get(a) && isspace(a)) ; if(is) is >> v.t; return is; } template<class T> Calc<T>& operator+(Calc<T>& a, Calc<T>& b) { return (a.t+b.t); } template<class T> Calc<T>& operator-(Calc<T>& a, Calc<T>& b) { return (a.t-b.t); } template<class T> Calc<T>& operator*(Calc<T>& a, Calc<T>& b) { return (a.t*b.t); } template<class T> Calc<T>& operator/(Calc<T>& a, Calc<T>& b) { return (a.t*b.t); } sånn, her har vi koden. Nå gjør jeg og fårfølgende i msys: $ g++ Calc.cpp -o Calc.exe Math.cpp:7: error: expected unqualified-id before "template" Math.cpp:8: error: expected unqualified-id before "template" Math.cpp:9: error: expected unqualified-id before "template" Math.cpp:10: error: expected unqualified-id before "template" Math.cpp:11: error: expected unqualified-id before "template" Math.cpp:12: error: expected unqualified-id before "template" Nå, jeg har prøvd mye men når jeg skriver progammet på denne måten får jeg ferrest error. Disse prøver jeg da å få bort(rettere sagt: har prøvd lenge å få bort) Kan noen hjelpe? Edit: Glemte å skrive selve problemet Endret 14. september 2004 av zirener Lenke til kommentar
saboi Skrevet 14. september 2004 Del Skrevet 14. september 2004 det skal være friend std::ostream& operator<<(std::ostream&, const Calc&); friend std::istream& operator>>(std::istream&, Calc&); osv Lenke til kommentar
Dead_Rabbit Skrevet 14. september 2004 Forfatter Del Skrevet 14. september 2004 Ok, takk, har prøvd dette men da får jeg warnings om at det ikke er en template funksjon, skal det være sånn her da? Trenger ikke funkjsonen å vite at det, f.eks er en Calc<int>? PS: Si ifra hvis dårlig formulert. Lenke til kommentar
saboi Skrevet 14. september 2004 Del Skrevet 14. september 2004 jeg får 0 warnings Lenke til kommentar
Dead_Rabbit Skrevet 15. september 2004 Forfatter Del Skrevet 15. september 2004 (endret) Å??? Jeg kan jo prøve å lage en helt ny kildekode og kompilere selv om det ikke burde ha noe å si... Edit: Er å endre friend deklarasjonen det eneste du har gjort? Jeg prøvde å fjerne Calc<T>& så det ble Calc& istedet men da ble det bare ennå verre. Funka bedre nå, vet ikke helt hvorfor, men nå kom det en hel haug warning da. Renger med at disse ikke har så mye å si, men tar dem med for det Edit2: Math.cpp:8: warning: friend declaration `std::ostream& operator<<(std::ostream&, const Calc<T>&)' declares a non-template function Math.cpp:8: warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning Math.cpp:9: warning: friend declaration `std::istream& operator>>(std::istream&, Calc<T>&)' declares a non-template function Math.cpp:10: warning: friend declaration `Calc<T>& operator+(Calc<T>&, Calc<T>&)' declares a non-template function Math.cpp:11: warning: friend declaration `Calc<T>& operator-(Calc<T>&, Calc<T>&)' declares a non-template function Math.cpp:12: warning: friend declaration `Calc<T>& operator*(Calc<T>&, Calc<T>&)' declares a non-template function Math.cpp:13: warning: friend declaration `Calc<T>& operator/(Calc<T>&, Calc<T>&)' declares a non-template function c:/mingw/mingw/bin/../lib/gcc/mingw32/3.4.0/../../../libmingw32.a(main.o)(.text+0x97):main.c: undefined reference to `WinMain@16' collect2: ld returned 1 exit status dette får jeg etter å ha gjort som du sa. Det er jo ikke noen error, men det er jo g Endret 15. september 2004 av zirener Lenke til kommentar
saboi Skrevet 15. september 2004 Del Skrevet 15. september 2004 (endret) #include <string> #include <iostream> using namespace std; //Calc.cpp #include <iostream> #include <cctype> template<class T> class Calc { //typedef: //Friends: friend std::ostream& operator<<(std::ostream&, const Calc&); friend std::istream& operator>>(std::istream&, Calc&); friend Calc& operator+(Calc&, Calc&); friend Calc& operator-(Calc&, Calc&); friend Calc& operator*(Calc&, Calc&); friend Calc& operator/(Calc&, Calc&); public: Calc(): t(0) { } private: T t; }; //-------------------------------Functions-------------------------------------------------- template<class T> std::ostream& operator<<(std::ostream& os, const Calc<T>& v) { os << v.t; return os; } template<class T> std::istream& operator>>(std::istream& is, Calc<T>& v) { is.clear(); int a; while(is.get(a) && isspace(a)) ; if(is) is >> v.t; return is; } template<class T> Calc<T>& operator+(Calc<T>& a, Calc<T>& b) { return (a.t+b.t); } template<class T> Calc<T>& operator-(Calc<T>& a, Calc<T>& b) { return (a.t-b.t); } template<class T> Calc<T>& operator*(Calc<T>& a, Calc<T>& b) { return (a.t*b.t); } template<class T> Calc<T>& operator/(Calc<T>& a, Calc<T>& b) { return (a.t*b.t); } int main() { } Compiling... main.cpp Linking... test - 0 error(s), 0 warning(s) Endret 15. september 2004 av saboi Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå