Obiekt innej klasy jako dana składowa klasy.
Ostatnio zmodyfikowano 2014-05-09 10:51
kitsss Temat założony przez niniejszego użytkownika |
Obiekt innej klasy jako dana składowa klasy. » 2014-05-07 19:21:41 Chcę w jednej klasie operować obiektem drugiej klasy. Jednakże wyskakuję error: field 'obiekt' has incomplete type| class 'nr1' does not have any field named 'obiekt'| Gdy zamienię kolejność definicji klas, czyli najpierw napiszę całą klasę nr2, wtedy działa bez zarzutów. Moje pytanie jest, czemu w takiej kolejności nie działa, skoro zadeklarowałem klasę nr2? #include <iostream> #include <cstdlib>
using namespace std;
class nr2;
class nr1 { public: int pies; nr2 obiekt; nr1( int a, int b ); };
nr1::nr1( int a, int b ) : obiekt( a, b ) { cout << "Wywoluje sie." << endl; }
class nr2 { public: int q1, q2; nr2( int ddd, int eee ) { q1 = ddd + eee; q2 = ddd - eee; } };
int main() { nr1 obiekt_wew( 2, 3 ); system( "PAUSE" ); return 0; }
|
|
libed |
» 2014-05-07 20:54:37 Definicję konstruktora nr1 musisz napisać PO zdeklarowaniu klasy nr2 |
|
pekfos |
» 2014-05-07 21:29:47 Definicję konstruktora nr1 musisz napisać PO zdeklarowaniu klasy nr2 |
No przecież jest. Umieszczenie jej po definicji klasy nr2 też nic nie da. W miejscu class nr2; powinna być definicja klasy nr2. |
|
libed |
» 2014-05-08 11:19:41 class nr2;
class nr1 { public: int pies; nr2 obiekt; nr1( int a, int b ); };
nr1::nr1( int a, int b ) : obiekt( a, b ) { cout << "Wywoluje sie." << endl; } Konstruktor nr1 woła konstruktor nr2 z argumentami a jedyne co kompilator wie o nr2 to to, że jest klasą. |
|
kitsss Temat założony przez niniejszego użytkownika |
» 2014-05-09 10:51:46 Po zamianie kolejności definicji klas (czyli pierwsza definiowana jest klasa nr2) działa wszystko jak należy. Wniosek z tego taki, że jeśli budujemy klasę po części z obiektów innych klas, to te ,,mniejsze klaski,, racjonalnie jest budować jako pierwsze, a na pewno już w programie zdefiniować je jako pierwsze. Czyli jak z budową samochodu: najpierw koła, kierownica... inne mniejsze rzeczy. Dzięki wielkie za pomoc ;) |
|
« 1 » |