" Nowa klasa? Osobny plik! " błąd kompilacji

0

Witam. Przerabiam symfonie c++ i mam problem z przykładem programu, dotyczącego klas, podzielonego na kilka plików. Kod programu jest w książce więc ten podany niżej jest po prostu jego fotografią.
Problemem jest błąd kompilacji przy starcie. Nie mam pojęcia o co chodzi. Używam visual studio 2010

//pierwsza.cpp

#include <iostream>
using namespace std;
#include "osoba.h"
#include "bilet.h"

void prezentacja(osoba);
void funkcja_w_innym_pliku();
int main()
{
osoba kompozytor;
osoba autor;

kompozytor.zapamietaj("Fryderyk Chopin",36);
autor.zapamietaj("Marcel Prouts",34);

prezentacja(kompozytor);
prezentacja (autor);

cout<<"\nUzywamy w tym pliku tez 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();
return 0;

}
//**
void prezentacja(osoba ktos)
{
cout<<"Mam zaszczyt przeddstawic panstwu, \nOto we wlasnej osobie:";
ktos.wypisz();
}

//druga.cpp

// pierwszy.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

#include <iostream>

using namespace std;
#include "bilet.h"

void funkcja_w_innym_pliku()
{
cout<<"\nJestesmy w innym pliku programu, \ntu tez uzywamy biletow\n";
bilet bialy;
bialy.zapamietaj("Krakow","Tarnow",bilet::osobowy);
bialy.wypisz();

cout<<"Spieszsy sie nam,zmieniamy bilet na taki:"<<endl;
bialy.zmien_rodzaj_pociagu(bilet::pospieszny);
bialy.wypisz();

}
//osoba.h

#ifndef OSOBA_H
#define OSOBA_H
//*****
//Plik:osoba.h

#include<iostream>
using namespace std;

class osoba
{

 char  nazwisko[80];
 int wiek;

public:
void zapamietaj(const char*napis,int lata);
//------------------------------------------------
void wypisz()
{
cout<<"\t"<<nazwisko<<",lat:"<<wiek<<endl;
}
};

#endif

//osoba.cpp

// pierwszy.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

#include "osoba.h"
#include <cstring> // do strcpy

void osoba::zapamietaj(const char*napis,int lata)
{

strcpy(nazwisko,(napis ? napis:"Anonim"));
wiek=lata;

}

//bilet.h

#ifndef BILETH
#define BILETH

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

// pierwszy.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

#include "bilet.h"
#include <iostream>
#include <cstring>
using namespace std;

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

a o to błędy kompilacji:

Error 6 error LNK1169: one or more multiply defined symbols found
Error 2 error LNK2005: _wmain already defined in bilet.obj
Error 3 error LNK2005: _wmain already defined in bilet.obj
Error 4 error LNK2005: _wmain already defined in bilet.obj
Warning 1 warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Warning 5 warning LNK4067: ambiguous entry point; selected 'mainCRTStartup'

0

To nie jest jeden przykład tylko kilka przykładów. Czytaj uważniej.

0
_13th_Dragon napisał(a):

To nie jest jeden przykład tylko kilka przykładów. Czytaj uważniej.

kilka przykładów? siedzę od rana przy kompie więc chyba przez to nie rozumiem :P Program jest podzielony na klasy w plikach nagłówkowych, a definicje ich funkcji składowych umieszczone są w imiennych plikach cpp.
plik "druga zawiera definicje funkcji deklarowanej w funkcji "pierwszej" a w tej własnie(widać ją na początku) jest cały przebieg programu z wykorzystaniem klas.
Ewenementem jest plik bilet.h w którym definiowana jest klasa biletu. Jedna z funkcji składowych zdefiniowana została w tym samym pliku lecz po za blokiem klasy. Ze względu na tą przypadłość została oznaczona jako funkcja inline.

1

Możesz mieć tylko jeden plik z main()

0
Shalom napisał(a):

Możesz mieć tylko jeden plik z main()

Dobra, nie komentuje mojej głupoty :D Dziękuje wam za odp

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0