Witam
Na początek kod programu, który ma łatwiej zobrazować moje pytanie:
/*
testowanie klas
*/
#include <iostream>
using namespace std;
//
// predeklaracja / deklaracja wstępna
class DANE; // -->> błąd forward declaration of `struct DANE'
//
class FUNKCJE
{
public:
FUNKCJE( );
int celKopiowania;
DANE *pDane;
void inicjalizacja(DANE *pDaneTemp);
void kopiowanie( );
};
FUNKCJE::FUNKCJE( )
{
celKopiowania = 80;
}
void FUNKCJE::inicjalizacja(DANE *pDaneTemp)
{
pDane = pDaneTemp;
};
void FUNKCJE::kopiowanie( )
{
celKopiowania = pDane->zrodloKopiowania; // -->> błąd invalid use of undefined type 'struct DANE'
};
//
class DANE
{
public:
DANE( );
int zrodloKopiowania;
FUNKCJE f;
};
DANE::DANE( )
{
zrodloKopiowania = 20;
}
//
// 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;
}
Chciałbym mieć dostęp do danych klasy "d" (klasa nadrzędna) z klasy "f". Przekazuję wskaźnik na klasę "d" do klasy "f" podczas wywołania funkcji inicjalizacja. Póki nie wpiszę linii celKopiowania = pDane->zrodloKopiowania;
Wtedy dostaję dwa błędy odpowiednio wykomentowane w kodzie źródłowym:
- invalid use of undefined type `struct DANE'
- forward declaration of `struct DANE'.
Czy w ogóle jest to jakoś możliwe do zrobienia? Proszę o pomoc.
Grzesiek.