Dzięki za szybkie odpowiedzi.
Wyjaśnienie kolegi Zjarek przemawia do mnie jaśniej. Przestawienie implementacji clasy w inną kolejność rozwiązuje mój problem poniżej listing.
/*
testowanie klas
*/
#include <iostream>
using namespace std;
//
// predeklaracja / deklaracja wstępna
class DANE;
//
// definicja klasy FUNKCJE
class FUNKCJE
{
public:
FUNKCJE( );
int celKopiowania;
DANE *pDane;
void inicjalizacja(DANE *pDaneTemp);
void kopiowanie( );
};
//
// cała klasa DANE
class DANE
{
public:
DANE( );
int zrodloKopiowania;
FUNKCJE f;
};
DANE::DANE( )
{
zrodloKopiowania = 20;
}
//
// implementacja klasy FUNKCJE
FUNKCJE::FUNKCJE( )
{
celKopiowania = 80;
}
void FUNKCJE::inicjalizacja(DANE *pDaneTemp)
{
pDane = pDaneTemp;
};
void FUNKCJE::kopiowanie( )
{
celKopiowania = pDane->zrodloKopiowania;
};
//
// główny program
int main()
{
static DANE d;
d.f.inicjalizacja(&d);
//
cout << " \n Przed kopiowaniem: \n";
cout << " \tZrodlo:\t" << d.zrodloKopiowania << "\n";
cout << " \tCel:\t" << d.f.celKopiowania << "\n";
//
// KOPIOWANIE
d.f.kopiowanie( );
//
cout << " \n po kopiowaniu: \n";
cout << " \tZrodlo:\t" << d.zrodloKopiowania << "\n";
cout << " \tCel:\t" << d.f.celKopiowania << "\n";
//
cout << " \n Koniec programu. Nacisnij ENTER aby zamknac okno. \n";
getchar();
return 0;
}
Natomiast nie wiem jak miałbym to przedstawić wraz z plikami dodatkowymi. Wykorzystuję to w większym programie właśnie z podziałem na pliki nagłówkowe i w tej chwili pojawia się następne pytanie jak to ma być, załączam kody plików. Wygodniej zrozumieć na prostym przykładzie stąd ten tu przytaczany.
// plik main.cpp
/*
testowanie klas wersja z plikami nagłówkowymi
*/
#include <iostream>
using namespace std;
//
// predeklaracja / deklaracja wstępna
class DANE;
//
// załączane pliki
#include "funkcje.hpp"
#include "dane.hpp"
//
// główny program
int main()
{
static DANE d;
d.f.inicjalizacja(&d);
//
cout << " \n Przed kopiowaniem: \n";
cout << " \tZrodlo:\t" << d.zrodloKopiowania << "\n";
cout << " \tCel:\t" << d.f.celKopiowania << "\n";
//
// KOPIOWANIE
d.f.kopiowanie( );
//
cout << " \n po kopiowaniu: \n";
cout << " \tZrodlo:\t" << d.zrodloKopiowania << "\n";
cout << " \tCel:\t" << d.f.celKopiowania << "\n";
//
cout << " \n Koniec programu. Nacisnij ENTER aby zamknac okno. \n";
getchar();
return 0;
}
// plik dane.hpp
#ifndef dane_hpp
#define dane_hpp
//
// definicja klasy DANE
class DANE
{
public:
DANE( );
int zrodloKopiowania;
FUNKCJE f; // -->> błąd `FUNKCJE' does not name a type
};
#endif
// plik dane.cpp
#include "dane.hpp"
//
// implementacja klasy DANE
DANE::DANE( )
{
zrodloKopiowania = 20;
}
// plik funkcje.hpp
#ifndef funkcje_hpp
#define funkcje_hpp
//
// definicja klasy FUNKCJE
class FUNKCJE
{
public:
FUNKCJE( );
int celKopiowania;
DANE *pDane;
void inicjalizacja(DANE *pDaneTemp);
void kopiowanie( );
};
#endif
// plik funkcje.cpp
#include "funkcje.hpp"
//
// implementacja klasy FUNKCJE
FUNKCJE::FUNKCJE( )
{
celKopiowania = 80;
}
void FUNKCJE::inicjalizacja(DANE *pDaneTemp)
{
pDane = pDaneTemp;
};
void FUNKCJE::kopiowanie( )
{
celKopiowania = pDane->zrodloKopiowania;
};
W pliku dane.hpp pojawia się błąd - jest tam zaznaczony. Z tym dołączaniem plików zawsze miałem kłopot, ale zawsze dochodziłem w końcu do ładu.
Liczę na Ciebie Zjarek :)
Może przy okazji nie wiem jak mam rozdzielić definicję od implementacji sporo (zapewne) nie kumam do końca dołączania plików :(, bo nie wiem w którym momencie sprawdzane/dołączane są pliki typu *.cpp
Być może użytkownik norma teraz mnie przekona.
Grzesiek