Witam, mam problem. Otóż piszę sobie pogram i moja klasa Klasyfikator musi mieć dostęp do rzeczy znajdujących się w public klasy Dane.
Nie wiem co zrobić, aby funkcje z maina działały (mogą być trochę inne, chodzi o to, żeby po utworzeniu obiektu Klasyfikator klasyfikator móc posługując się nim dotrzeć do pól obiektu Dane dane) UWAGA! Proszę o wyrozumiałość, bo dopiero się uczę :/
Main
#include "Dane.cpp"
#include "Klasyfikator.cpp"
using namespace std;
int main()
{
Klasyfikator klasyfikator;
klasyfikator.dane.liczSzerokosc(dane.szerokosc);
klasyfikator.dane.liczWysokosc(dane.wysokosc);
klasyfikator.dane.pobierzDane(dane.nazwy);
klasyfikator.dane.konwertujDane(dane.nazwy, dane.liczby, dane.widzianeNazwy);
// cout<<"liczby: "<<dane.liczby.size()<<" nazwy "<<dane.nazwy.size()<<endl;
// for( unsigned int i = 0; i < dane.liczby.size(); i++ )
// {cout<< dane.liczby[i] <<" ";
// if(i%dane.szerokosc==0) cout<<endl;}
// for(unsigned int i = 0; i < dane.widzianeNazwy.size(); i++ ) cout <<dane.widzianeNazwy[i]<<" ";
return 0;
}
Klasyfikator.cpp
#include "Klasyfikator.h"
Klasyfikator.h
#ifndef KLASYFIKATOR_H
#define KLASYFIKATOR_H
#include "Dane.h"
using namespace std;
class Klasyfikator
{
public:
Dane dane;
};
#endif
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
Dane.cpp (tego to chyba nawet czytac nie trzeba)
#include "Dane.h"
void Dane::pobierzDane(vector<string> &nazwy)
{
fstream plik;
plik.open( "dane.txt", ios::in );
string klucz;
while( !plik.eof() )
{
string linia;
getline( plik, linia );
linia+=",";
for(int i=0; linia[i]>=32;++i)
{
if(linia[i]!=44) {klucz+=linia[i];} //jezeli rozne od przecinka
else {nazwy.push_back(klucz); //wrzucamy w wektor poszczegolne wyrazy s
klucz.clear();}
}// for()
}//zamyka while
plik.close();
return ;
};
void Dane::liczWysokosc(int &wysokosc)
{
fstream plik;
plik.open( "dane.txt", ios::in );
if( plik.good() )
{
wysokosc = 0;
string linia;
while(!plik.eof())
{
getline(plik, linia);
if(linia[0]) wysokosc++; //liczmy wysokosc tablicy
}
plik.close();
}
else cout << "Error! Nie udalo sie otworzyc pliku podczas liczenia wysokosci!" << endl;
};
void Dane::liczSzerokosc(int &szerokosc)
{
fstream plik;
plik.open( "dane.txt", ios::in );
if( plik.good() )
{
szerokosc = 1;
string linia;
getline( plik, linia );
for(int i=0;linia[i]>=' ';i++)
if(linia[i]==',') szerokosc++;
}
else cout << "Error! Nie udalo sie otworzyc pliku podczas liczenia szerokosci!" << endl;
};
void Dane::konwertujDane(vector<string> &nazwy,
vector<unsigned int> &liczby,
vector<string> &widzianeNazwy)
{
for(unsigned int i=0 ; i<nazwy.size() ; i++)
{ bool znaleziono=false;
unsigned int j=0;
for(; j<widzianeNazwy.size() ; j++)
{
if(nazwy[i]==widzianeNazwy[j]) {znaleziono=true; liczby.push_back(j); break;}
}//for od widzianeNazwy.size
if(!znaleziono)
{
widzianeNazwy.push_back(nazwy[i]);
liczby.push_back(j);
}
}//for od nazwy.size
/*
vector <string> test;
for(unsigned int i=0 ; i<liczby.size() ; i++)
{ test.push_back(widzianeNazwy[liczby[i]]);}
for( unsigned int i = 0; i < test.size(); i++ )
{cout<< test[i] <<" ";}
// if(i!=0&&i%szerokosc==0) cout<<endl;}
*/
};