1 / 2
Jul 2023

Witam

Jestem mega początkującym i od kilku dni nie mogę znaleźć na webie odpowiedzi na nurtujące mnie pytania. Chodzi o inicjalizacje obiektów z klasy A w klasie B. Najlepiej na przykładzie - poniżej przykład części prostego kodu. W klasie “Object” mam zdefiniowany konstruktor, który przyjmuje 3 różne zmienne.

Teraz chcę zainicjować jakiś obiekt z klasy Object ale w innej klasie- klasie Game. Nie chciało mi skompilować przy użyciu zwykłych nawiasów (takich jak przy definicji w oryginalnym konstruktorze klasy Object), ktoś na intenecie doradził mi abym użył curly brackets i viola! No fajnie ale chciałbym jednak zrozumieć - dlaczego nie mogę użyć zwykłych nawiasów ale muszę curly?

class Object
{
public:

string name;
Coordinates position;
Coordinates speed;

Object (string shape, Coordinates pos, Coordinates sp)
{
    name = shape;
    position = pos;
    speed = sp;
}

void Draw()
{
    setCursorToPosition(position.x, position.y);
    cout << name;
}

void Move()
{
    position.x = position.x + speed.x;
    position.y = position.y + speed.y;
}

};

class Game
{
private:

Object player { "Playa",    { 40,27 }, { 0,0 } };
Object obj2   { "********", { 55, 5 }, { 0,1 } };

Rect gamePlayArea = { 0, 0, 121, 29 };
void UpdatePlayerInput()
public:

Game() {};
void RunGame()
  • created

    Jul '23
  • last reply

    Jul '23
  • 1

    reply

  • 282

    views

  • 2

    users

    Object player{ "Playa", { 40, 27 }, { 0, 0 } }; // OK
    Object player( "Playa", { 40, 27 }, { 0, 0 } ); // error
    Object player = Object{ "Playa", { 40, 27 }, { 0, 0 } }; // OK
    Object player = Object( "Playa", { 40, 27 }, { 0, 0 } ); // OK

    void UpdatePlayerInput() { // ...

Standard C++ nie przewiduje inicjalizacji składowej klasy w taki sposób. Kompilator będzie traktował nawiasy okrągłe jako składnię funkcji.