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

Obiekt innej klasy jako dana składowa klasy.

Ostatnio zmodyfikowano 2014-05-09 10:51
Autor Wiadomość
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?

C/C++
#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;
}

P-109441
libed
» 2014-05-07 20:54:37
Definicję konstruktora nr1 musisz napisać PO zdeklarowaniu klasy nr2
P-109446
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.
P-109453
libed
» 2014-05-08 11:19:41
C/C++
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ą.
P-109484
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 ;)
P-109550
« 1 »
  Strona 1 z 1