ZeroXbot Opublikowano 5 Sierpnia 2010 Udostępnij Opublikowano 5 Sierpnia 2010 Po długiej odstawce znowu się wziąłem za C++ i mam pewien problem, otóż dla poćwiczenia szablonów klas napisałem sobie taki do niczego niepotrzebny program. Tworzę w nim dynamicznie klasę wybranego przez użytkownika typu. Później może sobie na niej operować (czytaj zmieniać i pokazywać wartość zmiennej w klasie) i ją usunąć. Błędy wyskakują mi przy każdej operacji na klasie (tworzeniu i usuwaniu też), ale sądzę, że problem tkwi w samym tworzeniu (chyba zasięg też tu nie pasi, ale skoncentrujmy się na samym tworzeniu). Poniżej błędy i kod. c:\documents and settings\boys\moje dokumenty\visual studio 2008\projects\test5\test5\test.cpp(85) : error C2360: initialization of 'klasa' is skipped by 'case' label c:\documents and settings\boys\moje dokumenty\visual studio 2008\projects\test5\test5\test.cpp(83) : see declaration of 'klasa' c:\documents and settings\boys\moje dokumenty\visual studio 2008\projects\test5\test5\test.cpp(86) : error C2371: 'klasa' : redefinition; different basic types #include <iostream> #include<string> #include<conio.h> using namespace std; template <class typ> class mc { typ zmienna; public: void pokaz() { cout<<"Wartosc zmiennej klasy wynosi: "<<zmienna<<endl; } void pobierz() { cout<<"Podaj wartosc: "; cin>>zmienna; cout<<endl; } mc() { cout<<"Klasa utworzona!"<<endl; pobierz(); } ~mc() { cout<<"Klasa zniszczona!"<<endl; } }; int main() { int wybor; bool dobrze=true; do { do { cout<<"Co chcesz zrobic?" <<endl <<"1. Utworzyc klase" <<endl <<"2. Wyjsc" <<endl; wybor = getch(); switch(wybor) { case 1: dobrze=true; break; case 2: return 0; default: cout<<"Nieprawidlowy znak"<<endl; dobrze=false; break; } }while (!dobrze); do { cout<<"Wybierz typ:" <<endl <<"1. calkowity (int)" <<endl <<"2. zmiennoprzecinkowy (double)" <<endl <<"3. znak (char)" <<endl <<"4. lancuch znakow (string)" <<endl; dobrze=true; wybor = getch(); switch(wybor) { case 1: mc<int>* klasa= new mc<int>; break; case 2: mc<double>* klasa= new mc<double>; break; case 3: mc<char>* klasa= new mc<char>; break; case 4: mc<string>* klasa= new mc<string>; break; default: cout<<"Nieprawidlowy znak"<<endl; dobrze=false; break; } } while(dobrze); do { cout<<"Co chcesz zrobic?" <<endl <<"1. Zmienic wartosc" <<endl <<"2. Pokazac wartosc" <<endl <<"3. Usunac klase" <<endl; dobrze=false; wybor = getch(); switch(wybor) { case 1: klasa->pobierz(); break; case 2: klasa->pokaz(); break; case 3: delete klasa; dobrze=true; break; default: cout<<"Nieprawidlowy znak"<<endl; dobrze=false; break; } }while (!dobrze); }while(1); } Nie proszę o gotowy kod, tylko o jakieś wytłumaczenie, chyba że inaczej się nie da. Z góry dzięki ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 5 Sierpnia 2010 Udostępnij Opublikowano 5 Sierpnia 2010 lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol To nie GM ;) Wskaźnik na typ mc<.> ustaw na początku w funkcji main, bądź w zakresie globalnym. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MagnusArias Opublikowano 5 Sierpnia 2010 Udostępnij Opublikowano 5 Sierpnia 2010 PO za tym masz błąd w kodzie... Może nie techniczny, ale o co innego chodzi. Liczby zmiennoprzecinkowe to nie double, tylko float. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 5 Sierpnia 2010 Udostępnij Opublikowano 5 Sierpnia 2010 Liczby zmiennoprzecinkowe to nie double, tylko float. float - liczba zmiennoprzecinkowa double - liczba zmiennoprzecinkowa podwójnej precyzji Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MagnusArias Opublikowano 6 Sierpnia 2010 Udostępnij Opublikowano 6 Sierpnia 2010 To by double float choćby napisał. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 6 Sierpnia 2010 Udostępnij Opublikowano 6 Sierpnia 2010 nie potrzeba, tak samo jak samo unsigned zamiast unsigned int. na sile kombinujesz by sie przyczepic :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się