C++ error: redefinition of 'void Klasyfikator::iloscDecyzji(int&)'

0

Witam. Kolejny z moich "super-trudnych" problemów :/

Podczas próby kompilacji kompilator wywala

C:~\Klasyfikator R1\Klasyfikator.cpp|6|error: redefinition of 'void Klasyfikator::iloscDecyzji(int&)'|

Kod Klasyfikator.cpp

#include <vector> //dynamicznie rosnacy kontener
#include "Klasyfikator.h"



void Klasyfikator::iloscDecyzji(int &ilosc_decyzji)
{
    vector<int> widziane_decyzje;
    int numer_kolumny;

    cout<<"Podaj numer komlumny, w ktorej sa decyzje."<<endl;
    cin>>numer_kolumny;
    numer_kolumny-=1;
    for(unsigned int i=numer_kolumny; i<dane.liczby.size(););
};

Kod Klasyfikator.h

#ifndef KLASYFIKATOR_H
#define KLASYFIKATOR_H
#include "Dane.h"

using namespace std;

class Klasyfikator
{

    public:
        Dane dane;
        int ilosc_decyzji;
        void iloscDecyzji(int &ilosc_decyzji);

};

#endif

nie mogę znaleźć błędu :/

0

zakomentuj:
#include "Dane.h"
i postaw:
typedef int Dane;
zakomentuj też:
for(unsigned int i=numer_kolumny; i<dane.liczby.size(););
i spróbuj skompilować.

Jeżeli pójdzie to szukaj niedomkniętego #endif w "Dane.h"

0

Dane.h

#ifndef DANE_H
#define DANE_H

#include <fstream>  //obsluga plikow
#include <iostream>
#include <cstdlib>
#include <vector>  //kontenery
#include <cstring> //strcmp

using namespace std;

class Dane
{
    public:
        vector<string> nazwy;
        vector<string> widzianeNazwy;
        vector<unsigned int> liczby;
        int wysokosc;
        int szerokosc;
        void liczSzerokosc(int &szerokosc);
        void liczWysokosc(int &wysokosc);
        void pobierzDane(vector<string> &nazwy);
        void konwertujDane(vector<string> &nazwy,
                           vector<unsigned int> &liczby,
                           vector<string> &widzianeNazwy);


};
#endif

Jak tak zakomentowałem itd. to dostałem

C:~\Klasyfikator R1\Klasyfikator.cpp|6|error: 'void Klasyfikator::iloscDecyzji(int&)' previously defined here|
C:~\Klasyfikator R1\Dane.h|13|error: 'class Dane' has a previous declaration as 'class Dane'|

EDIT

Problem tkwił całkiem gdzieś indziej. Zamiast:

#include "Klasyfikator.cpp"

Trzeba było napisać:

#include "Klasyfikator.h"

w pliku main.cpp

i jakaś taka czyjaś złota myśl

#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ść).

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