Gość Opublikowano 22 Kwietnia 2004 Zgłoś Opublikowano 22 Kwietnia 2004 Czesc. Mam maly problem z funkcja void: chodzi o to ze powinna ona konwertowac stopy do metrow albo na odwrot. Napisalem ja tak jak ponizej: void dim::Convert_units ( char u1, char u2, char u3) { if ( u1 = 'm' and u2 = 'f') { units = 'm'; lengh_2 = l2 / 3.281; } else { units = 'f'; lengh_2 = l2 * 2.281; } f ( u2 = 'm' and u3 = 'f') { units = 'm'; high = h / 3.281; } else { units = 'f'; high = h * 2.281; } } }po probie skompilowania efekt jest taki p5.C: In member function `void dim::Convert_units(char, char, char)':p5.C:139: non-lvalue in assignmentp5.C:150: non-lvalue in assignmentp5.C:150: `f' undeclared (first use this function)p5.C:150: (Each undeclared identifier is reported only once for each function it appears in.)p5.C:151: syntax error before `{' tokenp5.C: At global scope:p5.C:162: syntax error before `}' token(i-search)`':Dodam ze u1 u2 i u3 sa skonfigurowane jako zmienne globalne i sa wykorzystywane przez polecenie cin w innej funkcji ktora wyglada tak: bool dim::h_input ( double h, char u3 ) { bool rv = true; cout << " Enter Lengh 1"; cin >> h; if (cin.fail() == 0 ) { cout << " Enter the units"; cin >> u3; if (cin.fail() == 0) { rv = true; } else { rv = false; } } else { rv = false; } return rv; }Prosze o pomoc bo zypelnie nie wiem o co tutaj chodzi. Z gory wielkie dzieki Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ChrisB Opublikowano 22 Kwietnia 2004 Zgłoś Opublikowano 22 Kwietnia 2004 f ( u2 = 'm' and u3 = 'f') ----- if -- nie f pozatym jak chcesz przyrownac u2 do m to piszesz u2=='m' czyli if (u2=='m' and u3 =='f'); to napoczatek;-) acha, masz jeszcze o jeden '}' na samym koncu za duzo... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 22 Kwietnia 2004 Zgłoś Opublikowano 22 Kwietnia 2004 Mam napisac program ktory liczy ple powierzchni i objetosc bryl z urzyciem klas. NIestey jest to dla mnie czarna magia. Mecze sie juz caly dzien i ciagle cos nie gra. To jest wersja programu do ktorej doszedlem #include <iostream>#include <cmath>using namespace std;// l1 dlugosz pierwsza// l2 dlugosc druga// l3 wysokoscdouble l1 , l2, h;// jednostki u1 dla l1 u2 dla l2 itdchar u1 , u2 , u3;class dim{public:double Get_lengh_1();double Get_lengh_2();double Get_high ();char Get_units();bool Set_lengh_1 (double l1);bool Set_units ( char u1, char u2, char u3);void dim::Convert_units ( char u1, char u2, char u3);bool dim::Set_high (double h);bool dim::Set_lengh_2 (double l2);dim::dim ();private:double lengh_1;double lengh_2;double high;char units;};bool Get_data_1 (dim& D);bool Get_data_2 (dim& D);bool Get_data_3 (dim& d);double dim::Get_lengh_1() { return lengh_1; }double dim::Get_lengh_2() { return lengh_2; }double dim::Get_high () { return high; }char dim::Get_units() { return units; }// to ma zmieniac jednostkize stop na metry albo odwrotnievoid dim::Convert_units ( char u1, char u2, char u3) { if ( u1 == 'm' and u2 == 'f') { units = 'm'; lengh_2 = l2 / 3.281; } else { units = 'f'; lengh_2 = l2 * 2.281; } if ( u2 == 'm' and u3 == 'f') { units = 'm'; high = h / 3.281; } else { units = 'f'; high = h * 2.281; } }// to ma sprawdzac czy l1 zostalo dobrze wprowadzone bool dim::Set_lengh_1 (double l1) { bool rv = true; if (l1 > 0.0 ) { l1 = lengh_1; } else { rv = false; } return rv; }bool dim::Set_lengh_2 (double l2) { bool rv = true; if (l2 > 0.0 ) { l2 = lengh_2; } else { rv = false; } return rv; }bool dim::Set_high (double h) { bool rv = true; if (h > 0.0 ) { h = high; } else { rv = false; } return rv; }int main(){// Tu nie wiem zupelnie co wpisac}// to pobiera dane od uzytkownika// nie wiem po co jest (dim& i co to jest d)bool Get_data_1 (dim& D){ bool rv = true; char l1; cin >> l1; if (cin.fail () == 0) { rv = D.Set_lengh_1 (l1); } else { rv = false; } return rv;}bool Get_data_2 (dim& D){ bool rv = true; char l2; cin >> l2; if (cin.fail () == 0) { rv = D.Set_lengh_2 (l2); } else { rv = false; } return rv;}bool Get_data_3 (dim& D){ bool rv = true; char h; cin >> h; if (cin.fail () == 0) { rv = D.Set_high (h); } else { rv = false; } return rv;}// to sa funkcje na oblicznie pola powierzchni i objetosci// wiem ze je powinienem zdefiniowac przed definicja klasy //ale zeby nie zaciemniac to sobie dalem spokuj double Sphere_Volume ( double lengh_1 ){ double Vol; Vol = (4 * M_PI * pow(lengh_1,3))/3; return Vol;}double Sphere_Surface ( double lengh_1 ){ double Surface; Surface = 4 * M_PI * pow (lengh_1,2); return Surface;}double RecPrism_Volume ( double lengh_1 , double lengh_2 , double high ){ double Vol = 0.0; Vol = lengh_1 * lengh_2 * high; return Vol;}double RecPrism_Surface ( double lengh_1 , double lengh_2 , double high ){ double Surface = 0.0; Surface = 2 * ( lengh_1 * lengh_2 + lengh_1 * high + lengh_2 * high ); return Surface;}double Cylinder_Volume ( double lengh_1 , double high ){ double Vol = 0.0; Vol = M_PI * pow (lengh_1,2) * high; return Vol;}double Cylinder_Surface ( double lengh_1 , double high ){double Surface = 0.0; Surface = 2 * M_PI * lengh_1 *( lengh_1 + high); return Surface;}double Cone_Volume ( double lengh_1 , double high ){ double Vol = 0.0; Vol = (M_PI * pow (lengh_1,2) * high)/3; return Vol;}double Cone_Surface ( double lengh_1 , double high ){ double l = 0.0 , Surface = 0.0; l = sqrt(pow (lengh_1,2) + pow (high,2)); Surface = M_PI * lengh_1 * l; return Surface;}double RecPyramid_Volume ( double lengh_1 , double lengh_2 , double high ){double Vol = 0.0;Vol = (lengh_1 * lengh_2 * high) /3;return Vol;}double RecPyramid_Surface ( double lengh_1 , double lengh_2 , double high ){double Surface = 0.0;Surface = (lengh_1 * lengh_2 + lengh_1 * high + lengh_2 * high);return Surface;} Jesli ktos wiedzial by jak to wszysko polaczyc w jedna calosc tak zeby dzialalo i wogole to bylbym bardzo wdzieczny za odpowiedz. Pozdraiwam i dziekuje. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dzi Opublikowano 22 Kwietnia 2004 Zgłoś Opublikowano 22 Kwietnia 2004 A dlaczego nei zapytasz tego ktory to pisal? ;) na poczatek to jak masz class dim { public: double Get_lengh_1(); double Get_lengh_2(); double Get_high (); char Get_units(); bool Set_lengh_1 (double l1); bool Set_units ( char u1, char u2, char u3); void dim::Convert_units ( char u1, char u2, char u3); bool dim::Set_high (double h); bool dim::Set_lengh_2 (double l2); dim::dim (); private: double lengh_1; double lengh_2; double high; char units; };to w konstruktorze (dim::dim() ) nie pisz tak tylko napisz samo dim(); Nie wiem czemu to napisalem i nie umiem/nie chce mi sie wyjasniac. Piszesz zawsze tylko nazwy funkcji w klasie przy deklaracji. Potem jak definiujesz to dowolujesz sie z nazwa klasy. Niewazne, zrob tak jak napisalem. W main() wpisujesz co sie ma po kolei dziac po uruchomieniu programu. Klasa generalnie nie powinna nic pobierac i wypisywac. Klasa to tylko abstrakcja odizolowowujaca dzialanie. Czyli w klasie trzymasz dane i sobie costam obliczasz wywolujac metody natomiast program robi zadanie. Reasumujac w funkcji main() tworzysz obiekt klasy, wywolujesz jakies zapytania o parametry, przypisujesz co trzeba, wywolujesz metody na obiekcie, wypisujesz co trzeba, konczysz. Generalnie program jest napisany tak ciezko i brzydko (sori ;) ) ze Ty bedziesz pierwsza osoba ktora na bazie tego co napisalem cos tam poprawi. Tak wiec mecz albo doplac temu co to robil. Dobra spojrzalem jeszcze raz i troche dopisze. Zrob taka strukture. klasa dim ma w sobie funkcje na obliczanie tych tam pol czy czegos i parametry ktore sa do tego potrzebne (np dlugosc czegostam). Zrob taki konstruktor: dim::dim(typ1 parametrPotrzebny1, typ2 parametrPotrzebny2 ...) ktory Ci przypisze te wartosci do tych tam parametrow w klasie. Potem w main cin>>jakiesWejscie;dim dim1(1, 2, 3, 4);int zmienna1 = dim1.obliczCostam();int zmienna2 = dim1.obliczJeszczeCos();cout<<zmienna1<<endl;cout<<zmienna2<<endl; Tak mniej wiecej struktura, tylko z sensem te obliczanki. Np jesli do jakis obliczen potrzebujesz parametr to w metodzie go podawaj jako parametr a nie trzymaj w klasie od poczatku. I przeczytaj jakis wstep do obiektowki w czyms, np. w Thinking in C++ Eckela (po angielsku jest na www.bruceeckel.com) coby zczaic w ogole co to sa obiekty i jak robic strukture programu. Mam nadzieje, ze pomoglem a nie przeszkodzilem, sory za ton ale jestem zmasakrowany jakis dzis... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...