C++ klasa korzystająca z wektora i metod innej klasy

0

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;}
*/


};
1

Masz 2 wyjścia:

  1. Dużo pisania:
klasyfikator.dane.liczSzerokosc(klasyfikator.dane.szerokosc);
klasyfikator.dane.liczWysokosc(klasyfikator.dane.wysokosc);
klasyfikator.dane.pobierzDane(klasyfikator.dane.nazwy);
klasyfikator.dane.konwertujDane(klasyfikator.dane.nazwy, klasyfikator.dane.liczby, klasyfikator.dane.widzianeNazwy);
  1. Dodatkowa zmienna:
Dane& dane = klasyfikator.dane;
dane.liczSzerokosc(dane.szerokosc);
dane.liczWysokosc(dane.wysokosc);
dane.pobierzDane(dane.nazwy);
dane.konwertujDane(dane.nazwy, dane.liczby, dane.widzianeNazwy);
0

Wielkie dzięki! Właśnie o to mi chodziło! -> działa ;D

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