Witam,
To mój pierwszy post z problemem na tym forum :) Być może problem jest błahy, ale ja kompletnie nie umiem sobie z nim poradzić.
Do rzeczy :
Czytam podręcznik "Symfonia C++ Standard" wyd.2008. Utknąłem na klasach. Dokładnie w podrozdziale 10.12 "Nowa klasa? Osobny plik!".
Przepisałem program (nie bezmyślnie!), ale nie wiem jak go skompilować. Jeśli ktoś nie ma tej książki podaje wszystkie pliki :
osoba.h
#ifndef OSOBA_H
#define OSOBA_H
//*****************************
//Plik osoba.h
//*****************************
#include <iostream>
using namespace std;
/////////////////////definicja klasy////////////////////////////////////
class osoba
{
char nazwisko[80];
int wiek;
public:
void zapamietaj(const char * napis, int lata);
//----------------
void wypisz()
{
cout << "\t" << nazwisko << ", lat: " << wiek << endl;
}
};
///////////////////koniec definicji klasy///////////////////////////////
#endif
osoba.cpp
//**********************************************************************
// Plik : osoba.cpp
//**********************************************************************
#include "osoba.h"
#include <cstring>
//**********************************************************************
void osoba::zapamietaj(const char * napis, int lata)
{
strcpy(nazwisko, (napis ? napis : "Anonim"));
wiek = lata;
}
bilet.h
#ifndef BILET_H_
#define BILET_H_
//**********************************************************************
//Plik : bilet.h
//**********************************************************************
class bilet
{
public:
enum rodzaj_pociagu { osobowy, przyspieszony, pospieszny, ekspres };
void zapamietaj( const char* sk, const char * dok, rodzaj_pociagu poc, int kl = 2);
void zmien_rodzaj_pociagu(rodzaj_pociagu poc);
void wypisz();
private:
char skad[80];
char dokad[80];
int klasa;
rodzaj_pociagu jaki_pociag;
const char * opis_rodzaju();
};
////////////////////////////////////////////////////////////////////////
//**********************************************************************
inline void bilet::zmien_rodzaj_pociagu(rodzaj_pociagu poc)
{
jaki_pociag = poc;
}
#endif
bilet.cpp
//**********************************************************************
//Plik: bilet.cpp
//**********************************************************************
#include "bilet.h"
#include <iostream>
using namespace std;
#include <cstring>
//**********************************************************************
void bilet::zapamietaj( const char* sk, const char * dok, rodzaj_pociagu poc, int kl)
{
strcpy( skad, (sk ? sk : "Brak danych"));
strcpy( dokad, (dok ? dok : "Brak danych"));
jaki_pociag = poc;
klasa = kl;
}
//**********************************************************************
void bilet::wypisz()
{
char kreska[] = "[----------------------------------------------]\n";
char brzegi[] = "[ ]\r[";
cout << kreska << brzegi << "Bilet: " << skad << " --> " << dokad
<< ", klasa " << klasa << "\n" << brzegi << " na pociag " << opis_rodzaju()
<< "\n" << kreska;
}
//**********************************************************************
const char * bilet::opis_rodzaju()
{
const char *nazwy[] = {
"osobowy (lub regionalny)",
"przyspieszony (lekko)",
"pospieszny",
"InterCity ekspres"
};
return nazwy[jaki_pociag]; //zmiana enum na int
}
pierwszy.cpp
////////////////////////////////////////////////////////////////////////
//plik pierwszy.cpp
////////////////////////////////////////////////////////////////////////
#include<iostream>
using namespace std;
#include "osoba.h"
#include "bilet.h"
void prezentacja (osoba);
void funkcja_w_innym_pliku();
//**********************************************************************
int main()
{
osoba kompozytor, autor;
kompozytor.zapamietaj("Fryderyk Chopin", 36);
autor.zapamietaj("Marcel Proust", 34);
//wywołujemy funkcje, wysylajac obiekty
prezentacja(kompozytor);
prezentacja(autor);
cout << "\nUżywamy w tym pliku też klasy 'bilet'\n";
bilet zolty, niebieski;
zolty.zapamietaj("Frankfurt", "Paris", bilet::ekspres, 1);
zolty.wypisz();
niebieski.zapamietaj("Zurich", "Genewa", bilet::przyspieszony);
niebieski.wypisz();
niebieski.zmien_rodzaj_pociagu(bilet::pospieszny);
cout << "\nPo zmianie tego biletu...\n";
niebieski.wypisz();
funkcja_w_innym_pliku();
}
//**********************************************************************
void prezentacja(osoba ktos)
{
cout << "Mam zaszczyt przedstawić państwu, \nOto we własnej osobie:";
ktos.wypisz();
}
drugi.cpp
////////////////////////////////////////////////////////////////////////
//plik drugi.cpp
////////////////////////////////////////////////////////////////////////
#include <iostream>
#include "bilet.h" // bo w bieżącym pliku używamy klasy bilet
using namespace std;
//**********************************************************************
void funkcja_w_innym_pliku()
{
cout << "\nJesteśmy w innym pliku programu, \ntu też używamy biletów\n";
bilet bialy;
bialy.zapamietaj ("Krakow", "Tarnow", bilet::osobowy);
bialy.wypisz();
cout << "Spieszy sie nam, zmieniamy bilet na taki:" << endl;
bialy.zmien_rodzaj_pociagu(bilet::pospieszny);
bialy.wypisz();
}
No i teraz pytanie : jak to skompilować? Każdy plik osobno ? Jak je później "złączyć" w jeden program? W ogóle tego nie pojmuje.
Dodam, że siedzę na Linuksie, piszę w geany oraz
$ gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Mam nadzieję, że znajdzie się ktoś kto mnie oświeci :)