Jezyk C, zdefiniowanie klasy - poprawienie bledu

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 »

Dokładnie, to ma być w końcu C, czy C++? a może poprostu? Heh argv wkroczył i wszystko wyjaśnił, czyżby to stąd ten nick?:>
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 »

Szczerze mowiac mimo wszystko wole miec w tym programie jak najwiecej jezyka C, bo C++ nawet nie zaczelismy, teraz dopiero dowiaduje sie od Was, ze klasy sa w C++. Tego jezyka w ogole nie znam, dlatego mimo wszystko wolalabym miec jak najwiecej formul z jezyka C.
Widzisz moze, co musze poprawic, zeby program dzialal i jednoczesnie byl analogicznie zrobiony do tamtego? Bo staralam sie go napisac wlasciwie dokladnie w ten sam sposob, ale gdzies musialam zrobic blad i nie moge go teraz znalezc.
W zadaniu priorytetem jest, zeby to byla klasa, ja chcialam, zeby bylo jak najwiecej formul z jezyka C w tym programie.
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 »

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>

using namespace std;

/* --------------------------------------------------------------------------- *
 *
 * --------------------------------------------------------------------------- */


class Samochod {
private: 
	string marka;
	string kolor;
	int stan_optyczny;
	int stan_techniczny;
public: 
	void Zaprezentuj();
	void Maluj(string nowyKolor);
	void WizytaWWarsztacie(int nakladFinansowy);
	void Wypadek(int moc); // niestety i tak^(1) mo?liwooe? musimy dopuoeci?
	void Tuning (int nakladFinansowy);
	Samochod();//konstruktory
	Samochod(string mar, string kol, 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;
	}
};


int main()
{
	Samochod auto1;
	Samochod auto2("Audi A4","Czarny",45,50);
	
	cout << "Samochod pierwszy:" << endl;
	
	auto1.Zaprezentuj();
	cout << "Samochod drugi:
" << endl;
	auto2.Zaprezentuj();
	
	auto1.Wypadek(50);
	cout <<"Samochod pierwszy po wypadku:" << endl;
	auto1.Zaprezentuj();
	cout << "Naprawmy samochod pierwszy." << endl;
	auto1.WizytaWWarsztacie(40);
	cout << "Samochod pierwszy po naprawie:" << endl;
	auto1.Zaprezentuj();
}


Samochod::Samochod()
{
	marka = "Golf 2";
	kolor = "Czerwony";
	stan_optyczny= 90;
	stan_techniczny = 80;
}

Samochod::Samochod(string mar, string kol, int op, int stan) //a oto konstruktor prze^(3)adowany pozwalaj^(1)cy stworzy? nam taki obiekt jaki chcemy
{
	marka = mar;
	kolor = kol;
	stan_optyczny= op;
	stan_techniczny = stan;
}

void Samochod::Zaprezentuj()
{
cout << "Marka: " << marka << " Kolor: " << kolor << endl;
}

void Samochod::Maluj(string nowy)
{
	kolor = nowy;
	stan_optyczny +=5;
}

void Samochod::WizytaWWarsztacie( int naklad_finansowy )
{

	cout << "Naprawa zakonczona
" << endl;
	
	if( naklad_finansowy + stan_techniczny >=100 )
		stan_techniczny =99; //mimo nak^(3)adu auto nowe sie^ nie stanie
	else
		stan_techniczny +=naklad_finansowy;
	
	stan_optyczny += naklad_finansowy/2;
}

void Samochod::Wypadek(int moc)
{
	if(stan_techniczny - moc < 0 )
		stan_techniczny = 0; 
	else
		stan_techniczny -=moc;
	stan_optyczny-= moc;
}

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

	if(czynnik_losowy > 0) {
		cout << "Super. Efekt przewyzszyl naklad
" << endl;
		stan_optyczny += naklad_finansowy + czynnik_losowy;
	}
	else {
		cout << "Niestety. Efekt koncowy nie zadziwi^(3)
" << endl;
		stan_optyczny += naklad_finansowy%20 + czynnik_losowy;
	}
}

To jest wersja bliższa C++ ...
Akurat teraz napisałaś że bliższe C ma być podczas mojego tworzenia, więc pewnie się nie przyda ale jak już się napisałem to niech będzie
Szybkie poprawki, brakuje tu mnóstwa rzeczy należnych c++ ale dziala .. troche pousuwalem bo nie chcialo mi się wszystkiego zmieniac, ale powino sie troche rozjasnic ...

Swoją drogą dziwni ludzie każą robić groch z kapustą i mącić w głowach
Krev
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 2 cze 2009, o 20:00
Płeć: Mężczyzna

Jezyk C, zdefiniowanie klasy - poprawienie bledu

Post autor: Krev »

@up przypadkiem nie brakuje biblioteki string ;>?
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 »

A żeby kompilował się Twój program to oczywiście wystarczy tylko
int main() {... } a nie void

main zawsze ma zwracać inta!
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 »

Mysle, ze jednak Twoja wersja moze sie przydac. Dziekuje za nia.
Probowalam zmienic u siebie void na int juz wczesniej, ale nadal sa bledy:

1.obj : error LNK2019: unresolved external symbol "public: int __thiscall Punkt::przesun_trzecia_wspolrzedna(int)" (?przesun_trzecia_wspolrzedna@Punkt@@QAEHH@Z) referenced in function _main
1.obj : error LNK2019: unresolved external symbol "public: int __thiscall Punkt::przesun_druga_wspolrzedna(int)" (?przesun_druga_wspolrzedna@Punkt@@QAEHH@Z) referenced in function _main
1.obj : error LNK2019: unresolved external symbol "public: int __thiscall Punkt::przesun_pierwsza_wspolrzedna(int)" (?przesun_pierwsza_wspolrzedna@Punkt@@QAEHH@Z) referenced in function _main
C:Documents and SettingsAdministratorDesktop1Debug1.exe : fatal error LNK1120: 3 unresolved externals

Nie wiem jak dokladnie zmienic swoj kod.
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 »

Proponuję przenieść się na Dev C++
Bo C++ w visualu to C++ microsoftu i różni się od standardu c++ w kilku miejscach ... więc wydaje mi się że nie ma sensu wdawać się w kolejne utrudnienia

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 »

Visual Studio czasem naciaga standard ale za to DevCpp już dawno przestał być rozwijany
a do autora, to co wyplywa linker to to że nie może znaleźć tych funkcji, które podaje, nie zdefiniowałeś ich.
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 »

Moglbys mi je zdefiniowac?
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 »

Ja wklepałem to do Visuala i on łyknął, pomijąjąc warningi nie mam żadnych problemów z linkerem.
Stwórz sobie nowy pusty projekt i wklej ... albo zmień środowisko na odpowiedniejsze
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 »

Mowisz o programie napisanym przeze mnie ze zmiana void na int?
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 »

Nie ma odpowiedniejszego środowiska możesz spróbować Eclipse ewentualnie, albo nawet kompilować z linii poleceń ale błąd jest w kodzie Poprawię Ci kod, tylko wrzuć tutaj jego aktualną wersję. Akurat mam VS odpalonego to sprawdze
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 »

#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);
Punkt_A.przesun_druga_wspolrzedna(1);
Punkt_A.przesun_trzecia_wspolrzedna(1);
printf("Punkt A po przesunieciu o wektor [1, 1, 1]:
");
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;
}

Bylabym bardzo wdzieczna. Prosze, zeby zmienic tylko to, co jest niezbedne.
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 »

1. class zmień a struct
2. int main()
3. zmiana typu zwracanego przez funkcję które nic nie muszą nic zwracać, czyli np void zaprezentuj() i poniższe funkcje (void implikuje brak return w ciele funkcji!)
4. dopisanie brakujących funkcji

Kod: Zaznacz cały

void Punkt::przesun_pierwsza_wspolrzedna(int nowa_pierwsza)
{
pierwsza_wspolrzedna = nowa_pierwsza;
}
void Punkt::przesun_druga_wspolrzedna(int nowa_druga)
{
druga_wspolrzedna = nowa_druga;
}
void Punkt::przesun_trzecia_wspolrzedna(int nowa_trzecia)
{
trzecia_wspolrzedna = nowa_trzecia;
}
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 »

Dziekuje za dotychczasowa pomoc. Jakos udalo sie poprawic program.
Teraz mam prosbe, zeby dopisac do nastepujacego programu odleglosc miedzy punktami A i B. Probuje na rozne sposoby, ale mi nie wychodzi. Prosze o jak najprostsza formule i bazowanie na tym, co juz jest napisane. Dziekuje bardzo!

Kod: Zaznacz cały

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


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

	public:
		int zaprezentuj();
		int przesun_pierwsza (int wsp1);
		int przesun_druga (int wsp2);
		int przesun_trzecia (int wsp3);
		
		Punkt(); 
		Punkt (int pierwsza, int druga, int trzecia); 

		bool Punkt::operator > (Punkt p)
		{
			if (pierwsza_wspolrzedna > p.pierwsza_wspolrzedna)
				return 1;
			else
				return 0;
		}

		bool Punkt::operator < (Punkt p)
		{
			if (druga_wspolrzedna < p.druga_wspolrzedna)
				return 1;
			else
				return 0;
		}

		bool Punkt::operator - (Punkt p)
		{
			if (trzecia_wspolrzedna - p.trzecia_wspolrzedna > 0)
				return 1;
			else
				return 0;
		}
};


void main()
{
	
	Punkt Punkt_A;
	Punkt Punkt_B(1, 3, 3);
	
	printf ("Punkt A:
");
	Punkt_A.zaprezentuj();
	getch();
	printf ("Punkt B:
");
	Punkt_B.zaprezentuj();
	getch();

	printf("Porownajmy z soba pierwsze wspolrzedne punktow A i B
");
	printf("Trwa porownywanie wspolrzednych... ");
	Sleep(3000);
	printf("3");
	Sleep(1000);
	printf("2");
	Sleep(1000);
	printf("1...
");
	Sleep(1000);

	if(Punkt_A > Punkt_B)
		printf("Punkt A ma wieksza pierwsza wspolrzedna

");
	else
		printf("Punkt B ma wieksza pierwsza wspolrzedna

");
	getch();

	printf("Porownajmy z soba drugie wspolrzedne punktow A i B
");
	printf("Trwa porownywanie wspolrzednych... ");
	Sleep(3000);
	printf("3");
	Sleep(1000);
	printf("2");
	Sleep(1000);
	printf("1...
");
	Sleep(1000);

	if(Punkt_A < Punkt_B)
		printf("Punkt B ma wieksza druga wspolrzedna

");
	else
		printf("Punkt A ma wieksza druga wspolrzedna

");
	getch();

	printf("Porownajmy z soba trzecie wspolrzedne punktow A i B
");
	printf("Trwa porownywanie wspolrzednych... ");
	Sleep(3000);
	printf("3");
	Sleep(1000);
	printf("2");
	Sleep(1000);
	printf("1...
");
	Sleep(1000);

	if(Punkt_A - Punkt_B > 0)
		printf("Punkt A ma wieksza trzecia wspolrzedna

");
	else
		printf("Punkt B ma wieksza trzecia wspolrzedna

");
	getch();
	
	Punkt_A.przesun_pierwsza(3);
	Punkt_A.przesun_druga(5);
	Punkt_A.przesun_trzecia(2);
	printf ("Przesunmy punkt A o wektor [3, 5, 2]
");
	printf ("Trwa przesuwanie punktu A... ");
	Sleep(3000);
	printf("3");
	Sleep(1000);
	printf("2");
	Sleep(1000);
	printf("1...
");
	Sleep(1000);
	printf("Punkt A po przesunieciu o wektor:
");
	Punkt_A.zaprezentuj();
	getch();
}

Punkt::Punkt()
{
	pierwsza_wspolrzedna = 2;
	druga_wspolrzedna = 2;
	trzecia_wspolrzedna = 2;

}

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;
}

int Punkt::przesun_pierwsza(int wsp1)
{
	pierwsza_wspolrzedna = pierwsza_wspolrzedna + wsp1;
			
	return 1;

}

int Punkt::przesun_druga(int wsp2)
{
	druga_wspolrzedna = druga_wspolrzedna + wsp2;
			
	return 1;

}

int Punkt::przesun_trzecia(int wsp3)
{
	trzecia_wspolrzedna = trzecia_wspolrzedna + wsp3;
			
	return 1;

}
ODPOWIEDZ