Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Multiple definition of...

Ostatnio zmodyfikowano 2013-01-09 22:00
Autor Wiadomość
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
C/C++
#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(&r,0);
    //w.dolacz(&s,1);
    w.dolacz( & t );
    w.dolacz( & u );
   
    return 0;
}



source.cpp
C/C++
#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
C/C++
#ifndef __UCZESTNIK_H__
#define __UCZESTNIK_H__

struct Uczestnik
{
    enum Plec { K, M, W };
    Uczestnik( Plec p )
        : plec( p )
    { }
    Plec plec;
};

#endif
P-73484
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ść).
P-73491
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?
P-73496
krzyk
» 2013-01-09 21:09:19
Usuń z projektu source.cpp tylko nie kasuj,powinno pomóc.
P-73498
Robespierre
Temat założony przez niniejszego użytkownika
» 2013-01-09 22:00:45
Pomogło, dzięki!
P-73509
« 1 »
  Strona 1 z 1