Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z klasami korzystającymi z siebie na wzajem

Ostatnio zmodyfikowano 2014-12-29 18:08
Autor Wiadomość
zzkk
Temat założony przez niniejszego użytkownika
Problem z klasami korzystającymi z siebie na wzajem
» 2014-12-28 19:28:56
Po raz pierwszy piszę większy projekt składający się z kilku klas (pewnie robię banalne błędy), nagle kompilator zaczął wyrzucać błędy:

[Error] invalid use of incomplete type 'class pole'
[Error] forward declaration of 'class pole'
.
.
.
(jest ich dużo takich samych w odniesieniu do każdej klasy korzystającej z klasy 'pole')

Na początku mam zadeklarowane wszystkie klasy, korzystają one z siebie nawzajem (przyjaźń)

Najbardziej dziwi mnie to, że wszystko działało bez zarzutów do bliżej nieokreślonego momentu.

Próbowałam porozdzielać klasy na osobne pliki - bez efektu.

help... ;)
P-123488
NopeDotAvi
» 2014-12-28 19:32:19
podaj trochę kodu. Przy przyjaźni musisz używać tak zwanych "forward declaration", a nie includować pliku z klasą.
Np:

C/C++
//foo.h
class Foo
{
    //klasa
}
i
C/C++
//boo.h
class Foo;

class Boo
{
    //klasa
};
P-123489
zzkk
Temat założony przez niniejszego użytkownika
» 2014-12-28 20:23:01
mam dwie wersje tego programu, jedna jest jako jeden plik, a druga podzielona na kilka.
W tej pierwszej mam poprzedzające deklaracje, w tym drugim to samo.
Co do kodu. Pierwszy błąd pojawia się przy kompilacji destruktora klasy 'kolorowa', inne dotyczą pozostałych klas, które też używają 'pole'. Nieco poobcinany kod:

C/C++
class pole;
class kolorowa;

class kolorowa {
    .
    .
    .
    .
    pole * next;
public:
    .
    .
    .
    .
    .
    ~kolorowa() {
        if( first ) {
            pole * temp, * temp2;
            temp = temp2 = first;
            while( temp ) {
                delete temp2;
                temp = temp->next;
            }
            temp = temp2 = first = NULL;
        }
    }
    .
    .
    .
};

class pole {
    .
    .
    .
public:
    pole();
    pole( string nazw, char kol, int cen, int opl, int cz )
        : nazwa( nazw )
         , cena( cen )
         , oplata( opl )
         , czynsz( cz )
         , wlasciciel( NULL )
    {
        postoj = new kolejka;
        .
        .
        .
    }
    friend class kolorowa;
    .
    .
    .
};
P-123495
Monika90
» 2014-12-28 21:53:03
Możesz przenieść definicję destruktora ~kolorowa() poniżej definicji klasy pole. Albo po prostu zamienić miejscami definicje klas pole i kolorowa, nie widzę żeby pole zależało od kolorowa, więc pole może być pierwsza.
P-123504
zzkk
Temat założony przez niniejszego użytkownika
» 2014-12-29 12:19:57
To nie rozwiazuje problemu
P-123530
DejaVu
» 2014-12-29 18:08:47
P-123578
« 1 »
  Strona 1 z 1