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 BILET_H_
#define 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
// 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'