Kłopot z klasą

0

Cześć, piszę sobie moduł w C++ do modyfikacji MTA. Od razu mówię że w C++ jestem w miarę początkujący, chociaż znam Lua więc jakby ktoś chciał pomóc to proszę o dokładniejsze wytłumaczenie :)
Ok, więc problem polega na tym że zaimplementowałem do modułu (plik .dll) system fizyki bullet + język skryptowy Lua. I teraz mam problem. Stworzyłem funkcję bulletSetUp w której ustawiam dane fizyki, między innym element świata na którym będę operował.

int CFunctions::bulletSetUp ( lua_State* luaVM )
{
    if ( luaVM )
    {
        btBroadphaseInterface* broadphase = new btDbvtBroadphase();
        btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
        btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
        btGImpactCollisionAlgorithm::registerAlgorithm(dispatcher);
        btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver;
        btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
        lua_pushboolean(luaVM, true);
    return 1;
    }
lua_pushboolean(luaVM, false);
return 0;
}
 

Funkcja działa prawidłowo. Teraz druga funkcja, physicsSetGravity która odpowiada za ustawianie grawitacji w świecie.

 int CFunctions::physicsSetGravity ( lua_State* luaVM )
{
    if ( luaVM )
    {
        if(dynamicsWorld == 0)
        {
            lua_pushboolean(luaVM, false);
        return 0;
        }
        CLuaArguments args;
        int data1;
        int data2;
        int data3;
        data1 = lua_tonumber ( luaVM, 1 );
        data2 = lua_tonumber ( luaVM, 2 );
        data3 = lua_tonumber ( luaVM, 3 );
      //  args.PushString("Hello World!");
        //args.PushArguments(luaVM);
        std::cout << "lolek: " << data1 << " and " << data2 << " and " << data3 << std::endl;
        dynamicsWorld->setGravity(btVector3(0, -10, 0));
        return 1;
    }
    return 0;
}

I tutaj jest już problem, ponieważ podczas kompilowania kompilator twierdzi, że zmienna dynamicsWorld nie istnieje. No w sumie ma rację, bo jest tworzona w pierwszej funkcji. Jak to rozwiązać? Z góry dzięki za pomoc.

0

uczyń dynamicsWorld polem klasy.

0

Zrobiłem coś takiego na górze:

 class dynamicsWorld {};

I teraz wywala błąd:
D:\MTABulletPhysics\ml_devkit\ml_base\CFunctions.cpp|80|error: expected unqualified-id before '->' token|
To jest ten fragment kodu:

 int CFunctions::physicsSetGravity ( lua_State* luaVM )
{
    if ( luaVM )
    {
       // if(dynamicsWorld == 0)
        //{
          //  lua_pushboolean(luaVM, false);
        //return 0;
        //}
        CLuaArguments args;
        int data1;
        int data2;
        int data3;
        data1 = lua_tonumber ( luaVM, 1 );
        data2 = lua_tonumber ( luaVM, 2 );
        data3 = lua_tonumber ( luaVM, 3 );
      //  args.PushString("Hello World!");
        //args.PushArguments(luaVM);
        std::cout << "lolek: " << data1 << " and " << data2 << " and " << data3 << std::endl;
        dynamicsWorld->setGravity(btVector3(0, -10, 0));
        return 1;
    }
    return 0;
}

Ta linijka:

 dynamicsWorld->setGravity(btVector3(0, -10, 0));

Znalazłbym sam rozwiązanie, ale nie rozumiem tego błędu.

0

dynamicsworld jest wskaźnikiem czy obiektem? jak obiektem to dajesz "." a jak wskaźnikiem to dajesz "->"

0

wcześniej było -> i działało dobrze. teraz zmieniłem na kropkę i jest:
error: expected unqualified-id before '.' token|

0

czekaj... zrobiłeś

class dynamicsWorld{}; 

?????
wiesz, że zdefiniowałeś klasę, a nie jej obiekt i możesz się przez to odnosić tylko do statycznych metod/zmiennych, chyba, że zrobiłeś to inaczej i nie pokazałeś kodu

0

tak. czyli jak mam zdefiniować obiekt? xd Wygooglowałem, ale nie mówi mi to nic

0

Utworzyłeś w ogóle jakiś obiekt dynamicsWord? Bo z tego co widzę używasz "." i "->" w odniesieniu nie do obiektu lub wskaźnika tylko bezprośrednio do klasy

[edit] Byłem kilka sekund wolniejszy od użytkownika wyżej :/ obiekt definiujesz tak:

typObiektu nazwaObiektu;

Czyli w Twoim przypadku piszesz tak:

dynamicsWorld nazwa;
0

Człowieku wpisujesz w google c++ klasy i sprawdź sobie jak się tworzy obiekty klas... 1 min czytania i będziesz wiedział wszystko http://cpp0x.pl/kursy/Kurs-C++/Klasy-obiekty/311

0

@ThePiotrek zobaczyłeś w ten link chociaż? klasa nie jest obiektem, jest definicją, działa jak int lub string... musisz zadeklarować obiekt tej klasy:

nazwa-klasy nawa-obiektu; 

i odnosić się do obiektu potem

0

1.Pisz w odpowiedziach a nie w komentarzach
2.czy ty czytasz co my do ciebie piszemy? Napisałem wyraźnie(pisze niewyraźnie ale komputer raczej nie ma takiej czcionki :P), że masz się odwoływać do obiektu klasy, a nie do klasy a więc nie:

klasa.zmienna; 

tylko obiektklasy.zmienna;

 i skąd masz tę funkcję setgravity? nie jest na polem klasy a więc nie możesz się do nie odwoływać przez obiekt klasy ani przez samą klasę

1 użytkowników online, w tym zalogowanych: 0, gości: 1