Jezyk C, zdefiniowanie klasy - poprawienie bledu

Tzncioe
Użytkownik
Użytkownik
Posty: 124
Rejestracja: 10 paź 2008, o 22:54
Płeć: Kobieta
Podziękował: 46 razy
Pomógł: 12 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: Tzncioe »

Witam!

Mam do zdefiniowania klase punkt w \(\displaystyle{ R^3}\). Nie chodzi mi o zrobienie calego zadania, ale o poprawienie bledow - sa cztery, wlasciwie wszystkie takie same. Prosze, zeby wrzucil to ktos do kompilatora i poprawil, bo ja nie moge ich przeskoczyc. Prosze o jak najprostszy zapis w jezyku C. Dziekuje bardzo!

Kod: Zaznacz cały

#include <stdafx.h>
#include <stdio.h>
#include <string.h>
#include <Windows.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

class Punkt
{
private:
	int pierwsza_wspolrzedna;
	int druga_wspolrzedna;
	int trzecia_wspolrzedna;

public:
	int zaprezentuj();
	int przesun_pierwsza_wspolrzedna(int nowa_pierwsza);
	int przesun_druga_wspolrzedna(int nowa_druga);
	int przesun_trzecia_wspolrzedna(int nowa_trzecia);

	Punkt();
	Punkt(int pierwsza, int druga, int trzecia);
};

void main()
{
	Punkt Punkt_A;
	Punkt Punkt_B(2, 3, 5);

	printf("Punkt A:
");
	getch();
	Punkt_A.zaprezentuj();
	printf("Punkt B:
");
	getch();
	Punkt_B.zaprezentuj();

	getch();
	Punkt_A.przesun_pierwsza_wspolrzedna(1);
	printf("Pierwsza wspolrzedna po przesunieciu:
");
	Punkt_A.zaprezentuj();
	Punkt_A.przesun_druga_wspolrzedna(1);
	printf("Druga wspolrzedna po przesunieciu:
");
	Punkt_A.zaprezentuj();
	Punkt_A.przesun_trzecia_wspolrzedna(1);
             printf("Trzecia wspolrzedna po przesunieciu:
");
	Punkt_A.zaprezentuj();

	getch();
}

	Punkt::Punkt()
	{
		pierwsza_wspolrzedna = 0;
		druga_wspolrzedna = 0;
		trzecia_wspolrzedna = 0;
	}

	Punkt::Punkt(int pierwsza, int druga, int trzecia)
	{
		pierwsza_wspolrzedna = pierwsza;
		druga_wspolrzedna = druga;
		trzecia_wspolrzedna = trzecia;
	}

	int Punkt::zaprezentuj()
	{
		printf("Pierwsza wspolrzedna: %d
", pierwsza_wspolrzedna);
		printf("Druga wspolrzedna: %d
", druga_wspolrzedna);
		printf("Trzecia wspolrzedna: %d
", trzecia_wspolrzedna);

	return 1;
	}
Tomcat
Użytkownik
Użytkownik
Posty: 327
Rejestracja: 23 mar 2009, o 21:51
Płeć: Mężczyzna
Lokalizacja: Świdnica
Podziękował: 10 razy
Pomógł: 62 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: Tomcat »

Po pierwsze po co dołączasz tyle plików? Po co Ci "windows.h", "string.h" i inne skoro nawet z nich nie korzystasz?

A tak ogólnie to z tego co wiem, funkcja main musi zwracać int, a nie void, no i dla trzymania sie standardu powinna zwracać 0 jeżeli zakończy poprawnie działanie.

Nie widzę definicji funckji przesun_... Po co zwracać wartość z funkcji która wypisuje wartości zmiennych? Takie funkcje, podobnie jak te przesuwające pozycję, powinny zwracać void.

I w ogóle po co tyle tego getch()? Tylko komplikuje kod, który można byłoby zdecydowanie lepiej, czytelniej napisać.
Tzncioe
Użytkownik
Użytkownik
Posty: 124
Rejestracja: 10 paź 2008, o 22:54
Płeć: Kobieta
Podziękował: 46 razy
Pomógł: 12 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: Tzncioe »

Robie to zadanie z takiego wzorca ze strony nauczyciela i on wstawil te wszystkie biblioteki, mimo ze wszystkich raczej nie uzyl. To jest drugorzedna sprawa. Chcialam najpierw zrobic cale zadanie, a potem powyrzucac niepotrzebne biblioteki, a teraz sa w razie gdybym ktoras pominela, a bylaby potrzebna. Z getch() jest podobnie. Jak sie uruchomi jego program, to po kolei wszystko sie wyswietla. Pozniej mam zamiar to ograniczyc.
A moglbys poprawic te moje bledy, o ktorych mowisz, zeby program dzialal? Zmienic fragment kodu, gdzie mam zle. Z gory dziekuje.
6hokage
Użytkownik
Użytkownik
Posty: 268
Rejestracja: 24 mar 2009, o 13:06
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 35 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: 6hokage »

A dlaczegóż nie pisać void main(), co mnie to obchodzi, że main powinien być int, obie wersje są akceptowane przez nowsze kompilatory, a ta z void nie wymaga pisania póżniej returna.
Tomcat
Użytkownik
Użytkownik
Posty: 327
Rejestracja: 23 mar 2009, o 21:51
Płeć: Mężczyzna
Lokalizacja: Świdnica
Podziękował: 10 razy
Pomógł: 62 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: Tomcat »

6hokage, nowsze kompilatory? Podaj przykład takiego nowszego kompilatora... Zresztą najpierw pytanie do autora, to ma być czyste C czy C++?

EDIT: Zresztą to raczej głupie pytanie skoro użyłeś klas , tu zamieszczam kod, funkcje poza tymi które napisałeś masz dobrze.

Kod: Zaznacz cały

#include <stdio.h>
#include <conio.h>

class Punkt
{
public:
	Punkt();
	Punkt(int pierwsza, int druga, int trzecia);
	
	void zaprezentuj();
	void przesuń1wspolrzedna(int nowaWartosc);
	void przesuń2wspolrzedna(int nowaWartosc);
	void przesuń3wspolrzedna(int nowaWartosc);

private:
	int pierwszaWspolrzedna;
	int drugaWspolrzedna;
	int trzeciaWspolrzedna;
};

void Punkt::przesuń1wspolrzedna(int nowaWartosc)
{
	pierwszaWspolrzedna = nowaWartosc;
}

void Punkt::przesuń2wspolrzedna(int nowaWartosc)
{
	drugaWspolrzedna = nowaWartosc;
}

void Punkt::przesuń3wspolrzedna(int nowaWartosc)
{
	trzeciaWspolrzedna = nowaWartosc;
}

int main()
{
	Punkt Punkt_A;
	Punkt Punkt_B(2, 3, 5);
	
	printf("Punkt A: 
");
	Punkt_A.zaprezentuj();
	printf("Punkt B: 
");
	Punkt_B.zaprezentuj();
	
	Punkt_A.przesun_pierwsza_wspolrzedna(1);
	printf("Pierwsza wspolrzedna po przesunieciu:
");
	Punkt_A.zaprezentuj();
	
	Punkt_A.przesun_druga_wspolrzedna(1);
	printf("Druga wspolrzedna po przesunieciu:
");
	Punkt_A.zaprezentuj();
	
	Punkt_A.przesun_trzecia_wspolrzedna(1);
	printf("Trzecia wspolrzedna po przesunieciu:
");
	Punkt_A.zaprezentuj();
	
	getch();
	return 0;
}
PS. Skompiluj u siebie i sprawdz czy jest ok, jakby były jakieś błędy to pisz, bo ja obecnie nie mam jak sprawdzić.

EDIT2: A właściwie nie masz do konca dobrze funkcja zaprezentuj niech bedzie void i usuń to return z jej ciała.
6hokage
Użytkownik
Użytkownik
Posty: 268
Rejestracja: 24 mar 2009, o 13:06
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 35 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: 6hokage »

Tomcat, Microsoft Visual c++ 6.0, Bilder c++ 6.ileś bodajże.
Tzncioe
Użytkownik
Użytkownik
Posty: 124
Rejestracja: 10 paź 2008, o 22:54
Płeć: Kobieta
Podziękował: 46 razy
Pomógł: 12 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: Tzncioe »

Ma byc czysty jezyk C. Do tego kodu:

#include <stdafx.h>
#include <stdio.h>
#include <conio.h>

class Punkt
{
public:
Punkt();
Punkt(int pierwsza, int druga, int trzecia);

void zaprezentuj();
void przesun1wspolrzedna(int nowaWartosc);
void przesun2wspolrzedna(int nowaWartosc);
void przesun3wspolrzedna(int nowaWartosc);

private:
int pierwszaWspolrzedna;
int drugaWspolrzedna;
int trzeciaWspolrzedna;
};

void Punkt::przesun1wspolrzedna(int nowaWartosc)
{
pierwszaWspolrzedna = nowaWartosc;
}

void Punkt::przesun2wspolrzedna(int nowaWartosc)
{
drugaWspolrzedna = nowaWartosc;
}

void Punkt::przesun3wspolrzedna(int nowaWartosc)
{
trzeciaWspolrzedna = nowaWartosc;
}

int main()
{
Punkt Punkt_A;
Punkt Punkt_B(2, 3, 5);

printf("Punkt A:
");
Punkt_A.zaprezentuj();
printf("Punkt B:
");
Punkt_B.zaprezentuj();

Punkt_A.przesun1wspolrzedna(1);
printf("Pierwsza wspolrzedna po przesunieciu:
");
Punkt_A.zaprezentuj();

Punkt_A.przesun2wspolrzedna(1);
printf("Druga wspolrzedna po przesunieciu:
");
Punkt_A.zaprezentuj();

Punkt_A.przesun3wspolrzedna(1);
printf("Trzecia wspolrzedna po przesunieciu:
");
Punkt_A.zaprezentuj();

getch();
return 0;
}

Sa bledy:
1.obj : error LNK2019: unresolved external symbol "public: void __thiscall Punkt::zaprezentuj(void)" (?zaprezentuj@Punkt@@QAEXXZ) referenced in function _main
1.obj : error LNK2019: unresolved external symbol "public: __thiscall Punkt::Punkt(int,int,int)" (??0Punkt@@QAE@HHH@Z) referenced in function _main
1.obj : error LNK2019: unresolved external symbol "public: __thiscall Punkt::Punkt(void)" (??0Punkt@@QAE@XZ) referenced in function _main
C:Documents and SettingsAdministratorDesktop1Debug1.exe : fatal error LNK1120: 3 unresolved externals

Bardzo podobne, do tych z mojego kodu.
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: spajder »

W języku C nie ma klas.
stdafx.h jest tylko i visualu więc musisz w nim programować. W normalnym C++ nie istnieje, main musi zwracać int.
Problem w tym, że korzystasz z nienapisanych funkcji (np. gdzie jest zaprezentuj() albo konstruktory). Wszystkie te funkcje trzeba napisać.
Tomcat
Użytkownik
Użytkownik
Posty: 327
Rejestracja: 23 mar 2009, o 21:51
Płeć: Mężczyzna
Lokalizacja: Świdnica
Podziękował: 10 razy
Pomógł: 62 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: Tomcat »

Tak jak spajder napisał, powinieneś sobie poradzić

6hokage, Visual Studio...hehe to jest kompilator? Brawo, brawo... Najpierw skompiluj i sprawdz zanim bedziesz głosił herezje że msvc pozwala żeby main nie zwracał inta. Naprawdę, to tworzenie wlasnych teorii naprawdę podziwiam...

A do autora w błędach wyraźnie jest napisane co jest nie tak, najprościej rzecz ujmując program łączący nie znajduje definicji funkcji, musisz je opisać. Ale skoro to ma być czyste C to nei używaj klas i zdefiniuj konstruktory.
6hokage
Użytkownik
Użytkownik
Posty: 268
Rejestracja: 24 mar 2009, o 13:06
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 35 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: 6hokage »

Tomcat co z tego, że visual to kombajn, jak zwał tak zwał, zawiera kompilator do c i to się liczy (bo musi zawierać zresztą).
Najpierw skompiluj i sprawdz zanim bedziesz głosił herezje że msvc pozwala żeby main nie zwracał inta. Naprawdę, to tworzenie wlasnych teorii naprawdę podziwiam
Jesteś po prostu idiotą, jeśli twierdzisz, że tego nie sprawdziłem. Visuala mam na swoim kompie od 2 lat, zawsze wartości zwracanej przez main nadaję typ void. Jak można być takim durniem, żeby osobie, której się nie zna wmawiać, że nie korzystała z programu o którym pisze. Kończę tę dyskusję, nie będę rozmawiał z kimś kto twierdzi, że lepiej wie jak ja piszę programy.

-- 2 cze 2009, o 13:50 --

A tu podaję opis deklaracji funkcji main z biblioteki Visuala: (spójrz odrazu na pogrubiony fragment)

"Program Startup: the main Function
A special function called main is the entry point to all C++ programs. This function is not predefined by the compiler; rather, it must be supplied in the program text. If you are writing code that adheres to the Unicode programming model, you can use the wide-character version of main, wmain. The declaration syntax for main is:

int main( );

or, optionally:

int main( int argc[ , char *argv[ ] [, char *envp[ ] ] ] );

The declaration syntax for wmain is as follows:

int wmain( );

or, optionally:

int wmain( int argc[ , wchar_t *argv[ ] [, wchar_t *envp[ ] ] ] );

Alternatively, the main and wmain functions can be declared as returning void (no return value). If you declare main or wmain as returning void, you cannot return an exit code to the parent process or operating system using a return statement; to return an exit code when main or wmain are declared as void, you must use the exit function."
Tomcat
Użytkownik
Użytkownik
Posty: 327
Rejestracja: 23 mar 2009, o 21:51
Płeć: Mężczyzna
Lokalizacja: Świdnica
Podziękował: 10 razy
Pomógł: 62 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: Tomcat »

Pracujesz na visualu dwa lata i nazywasz go kompilatorem? No cóż, sa różne pojęcia "profesjonalizmu"... Co do tego co napisałeś, oczywiście racja, MSDN nie kłamie i funkcja main alternatywnie może zwracać void i sie skompiluje właściwie wszędzie. Pytanie teraz, czy jest zgodne ze standardem? Otóż nie. void main() jest używana właściwie tylko podczas obsługi określonych procesów czy systemów. Skoro autor posta chce napisać bezbłędny kod to taki mu podaje, bezbłędny, zgodny ze standardami. A standard mówi, że funkcja main powinna zwracać wartość int albo kod błędu poniewaz tego oczekuje system. Poczytaj o tym, to nie zaszkodzi... A z MSDN umiem korzystać z tym, że są inne, bardziej wiarygodne źródła wiedzy o języku C czy C++ np książki twórców tych jezyków do których lektury też zachęcam. Jeżeli dodatkowo jesteś głodny wiedzy to proszę: , tyle. Do autora posta, poradziłeś sobie?

PS. 6hokage, słownictwo jakiego używasz, np nazywanie Visual Studio kompilatorem, oraz Twoja żałosna wiadomość na priv, na wypadek gdyby mi sie nie chciało czytać postów w tym temacie jest poprostu świadectwem, że to nie ja jestem tutaj idiotą... 2 lata używania środowiska nie znaczy, że jest guru i wiesz wszystko i nie czyni z Ciebie profesjonalisty. Infantylne oceny mojego zachowania również dobrze o Tobie nie świadczą. Ogólnie zastanów się nad tym co napisałem, bo jeszcze wiele wiedzy musisz posiąść.
6hokage
Użytkownik
Użytkownik
Posty: 268
Rejestracja: 24 mar 2009, o 13:06
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 35 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: 6hokage »

Napisałem, że korzystam z visuala 2 lata dlatego bo zarzuciłeś mi, że nie nie mam pojęcia o czym piszę. Czy ja gdzieś pisałem, że uważam się za profesjonalistę? Jestem początkującym i nie staram się uchodzić za znawcę tematu. Czyżbyś miał trudności z interpretacją prostego tekstu?
Cała dyskusja rozgorzała dlatego bo ty stwierdziłeś, że wymyślam głupoty pisząc, że nowsze kompilatory akceptują zapis void main(). Co jest oczywistą bzdurą. Są powody dla których nie powinno się tak pisać, ale początkujący w prorgamowaniu nie muszą się nimi przejmować. Wystarczyło napisać, że taki sposób jest dopuszczalny w pewnych sytuacjach, ale przy pisaniu bardziej profesjonalnych programów powinno się używać typu int. A co do nazewnictwa. Potocznie takie programy nazywa się kompilatorami, mimo, że posiadają o wiele szersze możliwości. Tak też mówią na nie informatycy na moim wydziale. Jeśli wolisz używać nazwy środowisko programistyczne to proszę bardzo, ale to nie jest konieczne.
Co do wiadomości na prive, napisałem ją bo sam często nie powracam do wielu tematów, gdy mi się już znudzą, a szansa, że nie skasujesz privea była o wiele większa niż to, że przeczytasz tego posta. Co tu jest dla Ciebie nie logiczne. Wcześniej sądziłem, że coś do Ciebie dotrze, ale ty nawet nie zrozumiałeś co napisałem. Więcej nie dyskutuję z Tobą.
Awatar użytkownika
argv
Użytkownik
Użytkownik
Posty: 569
Rejestracja: 27 maja 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 51 razy
Pomógł: 66 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: argv »

Potocznie to sie nazywa srodowiskiem programistycznym wlasnie A w pełnej wersji: Zintegrowane śrowdowisko programistyczne .. ale nie czepiajmy się głupot
To co piszesz to c++ i nie ma nic wspolnego z C. Przepraw to na struktury i funkcje.

A środowisko polecam Dev C++, przy czym zaznacz że projekt C i w opcjach kompilatora dodaj -Wall -ansi -pedantic to będziesz miał pewność, że piszesz w czystym C -- 2 cze 2009, o 17:58 --Przykład:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>

typedef struct punkt {
	int wsp1;
	int wsp2;
	int wsp3;
} PUNKT;

void inicjuj(PUNKT *p, int a, int b, int c)
{
	p->wsp1 = a;
	p->wsp2 = b;
	p->wsp3 = c;
}

void zaprezentuj(PUNKT p)
{
	printf("Pierwsza wsp = %d
", p.wsp1);
	printf("Pierwsza wsp = %d
", p.wsp2);	
	printf("Pierwsza wsp = %d
", p.wsp3);
}


void przesun_wsp1(PUNKT *p, int wsp)
{
	p->wsp1 = wsp;
}


int main(int argc, char *argv[])
{
	PUNKT p;
	
	inicjuj(&p, 1, 2, 3);
	zaprezentuj(p);
	przesun_wsp1(&p, 100);
	zaprezentuj(p);
 	
	return 0;
}
Tzncioe
Użytkownik
Użytkownik
Posty: 124
Rejestracja: 10 paź 2008, o 22:54
Płeć: Kobieta
Podziękował: 46 razy
Pomógł: 12 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: Tzncioe »

Nie mam jeszcze poprawionego programu, ale to z powodu braku czasu w tym momencie. Niebawem do niego wroce. Pierwszy raz przyszlo mi sie spotkac z klasami - po prostu dostalismy zadanie bez slowa wyjasnienia, ktore musimy zrobic i juz - stad moj brak orientacji w tym temacie.
Dziekuje za program, ale nie moge tego napisac strukturami, bo problem polega na tym, ze zadanie ma byc zrobione za pomoca klasy. Moj blad, ze napisalam, ze to ma byc w jezyku C. Mnie zalezy glownie o to, zeby byl na tyle prosty, zebym go zrozumiala.
Jesli chodzi o te klotnie, to moj pierwszy kod wygladal tak, a nie inaczej, bo robilam go wedlug nastepujacego wzorca (ktory dziala bezblednie):

#include <stdio.h>
#include <string.h>
#include <Windows.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>


class Samochod
{
private: // wszystkie zmienne s¹ prywatne czyli mog¹ byæ zmieniane za pomoc¹ "wnêtrza" klasy
char marka[10];
char kolor[10];
int stan_optyczny; //dopuszczamy wartoœci dowolne jako, ¿e uroda jest rzecz¹ wzglêdn¹
int stan_techniczny; // 100 - przy wyjeŸdzie z fabryki, 0 - wiadomo

public: // tutaj umieœcimy procedury dostêpne dla u¿ytkownika samochodu
int zaprezentuj();
int maluj( char nowy_kolor[10] );
int wizyta_w_warsztacie( int naklad_finansowy );
int wypadek( int moc ); // niestety i tak¹ mo¿liwoœæ musimy dopuœciæ
int tuning ( int naklad_finansowy );

Samochod();//konstruktory
Samochod(char mar[10], char kol[10], int op, int stan);

bool Samochod::operator>(Samochod p)//mo¿emy nawet definiowaæ operatory dla obiektów które tworzymy
{
if ( stan_techniczny > p.stan_techniczny )
return 1;
else
return 0;
}
};


void main()
{

Samochod auto1;
Samochod auto2("Audi A4","Czarny",45,50);

printf("Samochod pierwszy:\n");
getch();
auto1.zaprezentuj();
printf("Samochod drugi:\n");
getch();
auto2.zaprezentuj();

getch();
auto1.wypadek(50);
printf("Samochod pierwszy po wypadku:\n");
auto1.zaprezentuj();
getch();
printf("Naprawmy samochod pierwszy.\n");
auto1.wizyta_w_warsztacie(40);
printf("Samochod pierwszy po naprawie:\n");
auto1.zaprezentuj();

getch();
printf("Pomalujmy samochod pierwszy.\n");
getch();
auto1.maluj("Czarny");
printf("Samochod pierwszy po malowaniu:\n");
auto1.zaprezentuj();
getch();
printf("Ulepszmy samochod pierwszy.\n");
auto1.tuning(50);
printf("Samochod pierwszy po ulepszeniu:\n");
auto1.zaprezentuj();
getch();
printf("Porownajmy za pomoca zdefiniowanego operatora '>' samochod pierwszy z drugim\n");
printf(" 'Wiekszy' jest samochod\n");

if( auto1> auto2 ) auto1.zaprezentuj();
else auto2.zaprezentuj();

getch();
}


Samochod::Samochod()
{
strcpy( marka , "Golf II"); //korzystaj¹c z bez argumentowego konstruktora nie wiemy jaki samochód "stworzyæ"
strcpy( kolor , "Czerwony");//zatem naszym domyœlnym autem bêdzie obiekt importu z by³ego NRD
stan_optyczny= 90;
stan_techniczny = 80;

}

Samochod::Samochod(char mar[10], char kol[10], int op, int stan) //a oto konstruktor prze³adowany pozwalaj¹cy stworzyæ nam taki obiekt jaki chcemy
{
strcpy( marka , mar);
strcpy( kolor , kol);
stan_optyczny= op;
stan_techniczny = stan;
}

int Samochod::zaprezentuj()
{
printf("Marka %s,\nKolor %s,\nStan optyczny %d, \nStan techniczny %d \n\n",marka,kolor,stan_optyczny,stan_techniczny);

return 1;
}

int Samochod::maluj( char nowy_kolor[10] )
{
strcpy( kolor , nowy_kolor);
stan_optyczny +=5;

return 1;
}
int Samochod::wizyta_w_warsztacie( int naklad_finansowy )
{
printf("Trwa naprawa");
Sleep(1000);
printf("1");
Sleep(1000);
printf("2");
Sleep(1000);
printf("3");
printf("Naprawa zakonczona\n");

if( naklad_finansowy + stan_techniczny >=100 )
stan_techniczny =99; //mimo nak³adu auto nowe siê nie stanie
else
stan_techniczny +=naklad_finansowy;

stan_optyczny += naklad_finansowy/2;

return 1;

}

int Samochod::wypadek( int moc )
{
if( stan_techniczny - moc < 0 )
stan_techniczny = 0; //bardziej siê popsuæ nie da
else
stan_techniczny -=moc;

stan_optyczny-= moc;

return 1;

}
int Samochod::tuning( int naklad_finansowy )
{
srand((unsigned)time( NULL ));
int czynnik_losowy = rand()%100-100;

if( czynnik_losowy > 0 )
{
printf("Super. Efekt przewyzszyl naklad\n");
stan_optyczny += naklad_finansowy + czynnik_losowy;
}
else
{
printf("Niestety. Efekt koncowy nie zadziwi³\n");
stan_optyczny += naklad_finansowy%20 + czynnik_losowy;
}

return 1;
}

Chcialam w nim najpierw tylko pozmieniac dane, zeby chociaz dzialal. I nie moge znalezc u siebie bledu, mimo ze staralam sie napisac wlasciwie dokladnie to samo. To jest moj problem. Tu z tym void i int w poszczegolnych miejscach wszystko dziala, a u mnie niekoniecznie. Mimo to dziekuje wszystkim, ktorzy caly czas staraja sie mi pomoc.
Awatar użytkownika
argv
Użytkownik
Użytkownik
Posty: 569
Rejestracja: 27 maja 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 51 razy
Pomógł: 66 razy

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: argv »

Więc kilka rad: staraj się nie mieszać C z C++.
1.
Czyli w szczególności zamiast printf używaj

Kod: Zaznacz cały

cout << "Ala ma kota" << endl
2. Staraj się używać nagłówków z C++ i poprawnego maina:

Kod: Zaznacz cały

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    return 0;
}
3. zamiast char[] używaj typu string, będzie prościej

Kod: Zaznacz cały

    string s;
    
    cin >> s;          /* wczytwanie */
    cout << s << endl; /* wypisywanie */
4. Metody które nic nie zwracają dawaj void.

W końcu skoro masz klasy to nie piszesz w C tylko C++ więc lepiej się trzymać już jednego języka niż mieszać dwa różne.
ODPOWIEDZ