Multiple definition of...
Ostatnio zmodyfikowano 2013-01-09 22:00
Robespierre Temat założony przez niniejszego użytkownika |
Multiple definition of... » 2013-01-09 19:18:23 Witam. Podczas kompilacji wywala mi błąd "multiple definition of" na temat każdej zdefiniowanej metody pliku source.cpp. Mogę ingerować w kod tylko pliku source.cpp, korzystam z DEV C++. main.cpp #include <iostream> #include "source.cpp" using namespace std;
int main() { Wodzirej w; Uczestnik p( Uczestnik::K ); Uczestnik q( Uczestnik::M ); Uczestnik r( Uczestnik::K ); Uczestnik s( Uczestnik::M ); Uczestnik t( Uczestnik::K ); Uczestnik u( Uczestnik::M ); cout << "####################\n"; w.dolacz( & p ); cout << w.dolacz( & q ) << endl; w.dolacz( & t ); w.dolacz( & u ); return 0; } source.cpp #ifndef __SHERMAN_ #define __SHERMAN_ #include <iostream> #include "Uczestnik.h"
using namespace std;
class Wodzirej { public: Wodzirej(); unsigned int dolacz( Uczestnik * osoba ); struct Lista { Uczestnik * osoba; static int id; Lista * lewy; Lista * prawy; Lista(); }; private: Lista * start; Lista * koniec; Lista * chusteczka; };
int Wodzirej::Lista::id = 0;
Wodzirej::Lista::Lista() { lewy = NULL; prawy = NULL; id++; }
Wodzirej::Wodzirej() { Uczestnik * osoba = new Uczestnik( Uczestnik::W ); Lista * lista = new Lista; lista->osoba = osoba; start = koniec = chusteczka = lista; }
unsigned int Wodzirej::dolacz( Uczestnik * osoba ) { if( osoba->plec == Uczestnik::W ) return 0; Lista * lista = new Lista; lista->osoba = osoba; lista->lewy = koniec; lista->lewy->prawy = lista; koniec = lista; return lista->id; } #endif
Uczestnik.h #ifndef __UCZESTNIK_H__ #define __UCZESTNIK_H__
struct Uczestnik { enum Plec { K, M, W }; Uczestnik( Plec p ) : plec( p ) { } Plec plec; };
#endif |
|
Mrovqa |
» 2013-01-09 20:20:40 #include "source.cpp" Zapamiętaj to sobie: plików .cpp/.cxx/.c NIGDY nie inkludujemy. Takie pliki są wtedy kompilowane kilkukrotnie, a gdy linker ma połączyć takie moduły, to widzi po prostu kilku identycznych funkcji - nie wie dokąd ma dopasować konkretne wywołanie funkcji/metody odniesienie się do obiektu globalnego/statycznego - i sygnalizuje błąd (następuje wieloznaczność). |
|
Robespierre Temat założony przez niniejszego użytkownika |
» 2013-01-09 20:46:02 Problem polega na tym, że nie mam dostępu do pliku main.cpp. Fragment treści zadania: "Całość implementacji musi się znaleźć w pliku source.cpp. Plik ten musi włączać plik nagłówkowy #include "Uczestnik.h". Plik Uczestnik.h będzie dostępny w czasie kompilacji i testowania Państwa rozwiązań [...] Do systemu należy wysłać jedynie plik source.cpp zawierający kompletną implementację klasy Wodzirej i nie zawierający funkcji main. Państwa plik będzie włączany do programów testujących poprawność implementacji za pomocą #include "source.cpp"". Zamieszczony w pierwszym poście plik main.cpp jest jedynie przykładowym plikiem z zadania. Co powinienem zrobić aby to działało? |
|
krzyk |
» 2013-01-09 21:09:19 Usuń z projektu source.cpp tylko nie kasuj,powinno pomóc. |
|
Robespierre Temat założony przez niniejszego użytkownika |
» 2013-01-09 22:00:45 Pomogło, dzięki! |
|
« 1 » |