Skocz do zawartości
Gość

CPP i problem z funkcja void

Rekomendowane odpowiedzi

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...