játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5455
FZoli:    4892
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2521

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2189
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1625
syam:    1491
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] > 30 < [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] [105] [110] [115] [120] [125] [130] [135] [140] [141]
Pretender - Törzstag | 2498 hsz       Online status #166680   2011.10.13 06:11 GMT+1 óra  
Na igen... és ki beszélt itt biciklizésről? Nem azt mondtam, h ne kérdezz, de mindezt nagyon jól elmondja egy rakat könyv. Gondolom... én c#-ot tanultam először, de onnantól szinte mind1, csak a szintaktika más.

   
zeller - Törzstag | 470 hsz       Online status #166675   2011.10.12 21:35 GMT+1 óra  
De programozasi nyelvek szintaktikajat, szemantikajat es know-how-jat mar igen... Gyakorlassal egybekotve persze.

   
KILLER_RICSI - Tag | 8 hsz       Online status #166674   2011.10.12 20:59 GMT+1 óra  
Srácok, köszi a tanácsokat...

Könyvből sem tanult meg még senki biciklizni...

   
Pretender - Törzstag | 2498 hsz       Online status #166584   2011.10.11 20:44 GMT+1 óra  
Ja, lehet, hogy én is félreértettem
Érdemes tanulni egy kis OOP-t, és c++t

   
Asylum - Törzstag | 5455 hsz       Online status #166583   2011.10.11 20:28 GMT+1 óra  
Én még a kérdést se értem, csak sejtem mire gondolsz (a Map osztályból elérni egy main-ben deklarált tömböt?).
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Pretender - Törzstag | 2498 hsz       Online status #166582   2011.10.11 19:45 GMT+1 óra  
Kód:
Robotok* GetRobot(const int& p_Id)
{
    return robot[p_Id];
}

?

szerk.:
ajánlok valami alapokkal foglalkozó c++ könyvet

   
KILLER_RICSI - Tag | 8 hsz       Online status #166581   2011.10.11 19:42 GMT+1 óra  
Sziasztok!


Adott a következő példányosítás a main-ben:

Kód:
Robotok **robot = new Robotok*[n];
for(int i = 0; i < n; i++)
{
robot[i] = new Robotok();
}


Azt szeretném megoldani, hogy a Map osztály egyik metódusából tudjak hivatkozni a robotok osztály robot[ i ] valamelyik példányára.
Ehhez meg kellene adnom egy bemeneti paramétert a Map osztály adott metódusában, amit nem tudok.
Ugyan így kimeneti paramétert is tudnom kellene adni, ha változtatok valamit adott robot[ i ] példányon.

Tudna valaki segíteni? (Igen, beraktam kód-blokkba a kódot, hogy rendesen megjelenjen. - HG)

Köszi!

Üdv: Ricsi

Ezt a hozzászólást HomeGnome módosította (2011.10.11 21:23 GMT+1 óra, ---)

   
KILLER_RICSI - Tag | 8 hsz       Online status #166580   2011.10.11 19:36 GMT+1 óra  
Köszi!

   
Asylum - Törzstag | 5455 hsz       Online status #166487   2011.10.09 15:13 GMT+1 óra  
Kód:
class Map
{
private:
    int** tomb;
    int width, height;

public:
    Map() {
        tomb = NULL;
        width = height = 0;
    }

    ~Map() {
        // TODO: törölni a résztömböket
        delete [] tomb;
    }

    void resize(int w, int h)
    {
        // TODO: ha létezik már akkor töröld
        tomb = new int*[w];

        for( int i = 0; i < w; ++i )
            tomb[i] = new int[h];
    }
};
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
KILLER_RICSI - Tag | 8 hsz       Online status #166485   2011.10.09 14:54 GMT+1 óra  
Sikerült megint elakadnom....



A problémám most az, hogy nem tudok létrehozni dinamikus helyfoglalású tömböt a Map osztályban

Elgondolásom szerint a főprogramban adnám meg a 2D-s tömb méretét 2 változóval (x, y).
A Map osztályban két metódus segítségével állítanám be a tömb méretét (main-ból adnám át a két értéket, setx, sety).

A Map header file-ában pedig deklarálnom kell a matrix tömböt.
És itt jön a probléma, mert nem tudom előre a méretét, így nem tudom megadni....
Gondolom, hogy itt valami általános formulát kellene használni, amellyel jelzem, hogy lesz egy ilyen nevű tömb....

(Metóduson belül nem hozhatom létre a tömböt, mert az csak a metódus lefutásáig van életben.)

Tudna valaki segíteni?

Köszönöm!

Üdv: Ricsi

   
KILLER_RICSI - Tag | 8 hsz       Online status #166480   2011.10.09 13:58 GMT+1 óra  
Köszönöm, köszönöm!

Készülnek a robotok... ))


Üdv: Ricsi

   
gaborlabor - Moderátor | 4449 hsz       Online status #166479   2011.10.09 13:45 GMT+1 óra  
Robotok *robotok = new Robotok[n];
n a darabszám.
felszabadításnál delete[] robotok;

(amúgy a Robotok típust átnevezném Robot-ra.)

   
borsi - Tag | 180 hsz       Online status #166478   2011.10.09 13:44 GMT+1 óra  
pl
Kód:
Robotok **robot = new Robotok*[n];
for(int i = 0; i < n; i++)
{
robot[i] = new Robotok();
}


Ennél a megoldásnál még figyelni kell arra, hogy a delete [] robot; leakel, először végig kell menni a tömbön és egyenként fel kell szabadítani a Robotok objektumokat.

Kód:
for(int i = 0; i < n; i++)
{
      delete robot[i];
}
delete [] robot;

Ezt a hozzászólást borsi módosította (2011.10.09 14:03 GMT+1 óra, ---)

   
KILLER_RICSI - Tag | 8 hsz       Online status #166477   2011.10.09 13:37 GMT+1 óra  
Sziasztok!


Lenne a következő foglalás:


Robotok *robot1 = new Robotok;
Robotok *robot2 = new Robotok;
...
...
...
Robotok *robotn = new Robotok;


Így létre tudom hozni a sorszámozott robot pédányokat.
A kérdésem az lenne, hogy a létrehozást tudom-e tömbként megtenni?
Az lenne a cél, hogy ciklussal hozzam létre a robotokat - dinamukusan megadott mennyiségben.
Valahogy így gondoltam:

Robotok *robot[n] = new Robotok;

Persze ez nem működik.

Van valakinek ötlete?

Köszi!

Üdv: Ricsi

   
Asylum - Törzstag | 5455 hsz       Online status #166406   2011.10.07 22:37 GMT+1 óra  
Idézet
borsi :
találj ki olyan problémát, amihez optimális adatszerkezet a list<map<string, vector<int>>>...



Ismered a mondást: aki nem érti az tanitja...
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
borsi - Tag | 180 hsz       Online status #166395   2011.10.07 21:26 GMT+1 óra  
Ja hát 'az egyetem' javára legyen írva, hogy 2. félév elején végig vettük, melyik stl konténer milyen adatszerkezetet használ (nagyjából), ezeknek mik az erősségeik, gyengéik. A számonkérés mondjuk vicces volt, pl találj ki olyan problémát, amihez optimális adatszerkezet a list<map<string, vector<int>>>...

   
Joga - Törzstag | 1791 hsz       Online status #166392   2011.10.07 20:52 GMT+1 óra  
proof88: Igen, úgy vannak implementálva

szerk.: Illetve a láncolt lista sszem kétszeresen láncolt, fejelemes
(ಠ ›ಠ) Stewie!

   
proof88 - Törzstag | 530 hsz       Online status #166391   2011.10.07 20:51 GMT+1 óra  
én nem tudom, hogy hogy vannak a háttérben implementálva a vector és list osztályok, de ha a vector dinamikus tömbként, a list meg láncolt listaként, akkor az mindent elmond a különbségekről.
   
dvorgaz - Törzstag | 575 hsz       Online status #166385   2011.10.07 19:08 GMT+1 óra  
Pl. ha a közepébe akarsz új elemet berakni.
   
Pretender - Törzstag | 2498 hsz       Online status #166384   2011.10.07 18:45 GMT+1 óra  
nekem mindenre elég a vector (meg néha a map, pl. content managernél). Miben jobb a list?

   
Joga - Törzstag | 1791 hsz       Online status #166383   2011.10.07 18:44 GMT+1 óra  
én meg mindenre a legmegfelelőbb adatszerkezetet
(ಠ ›ಠ) Stewie!

   
Pretender - Törzstag | 2498 hsz       Online status #166381   2011.10.07 18:13 GMT+1 óra  
én meg vectort

   
Seeting - Törzstag | 2306 hsz       Online status #166369   2011.10.07 13:53 GMT+1 óra  
Dejó hogy én mindenre mapot használok
   
Asylum - Törzstag | 5455 hsz       Online status #166354   2011.10.07 08:06 GMT+1 óra  
De van jelentosege mert esetenkent orakig pocsolsz mire rajossz hogy mitol van. Ezert is erdemes sajatot irni / kerulni az ilyen statikus valtozokat + {}-be tenni a programot.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
zeller - Törzstag | 470 hsz       Online status #166353   2011.10.07 06:46 GMT+1 óra  
Aha. Szoval igazabol ennek semmi jelentosege sincsen, egy nagyobb program futasa kozben nem okoz memory leaket csak ugy a list meg az xtree hasznalata

   
Asylum - Törzstag | 5455 hsz       Online status #166334   2011.10.06 19:38 GMT+1 óra  
Azert mert az elsö esetben a dump után fut le az li destruktora.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
zeller - Törzstag | 470 hsz       Online status #166323   2011.10.06 17:49 GMT+1 óra  
Ez nekem magas. Mi az, hogy valojaban nem? Es akkor miert dumpol. Es az anonimusz blokkban miert nem?

   
Asylum - Törzstag | 5455 hsz       Online status #166321   2011.10.06 17:01 GMT+1 óra  
Kód:
// igy igen (valojaban nem, de ki fogja dumpolni)
int main()
{
    std::list<int> li;

   // ...
}


// igy nem
int main()
{
    {
        std::list<int> li;
    }

    // ...
}
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
zeller - Törzstag | 470 hsz       Online status #166313   2011.10.06 15:28 GMT+1 óra  
Ezt most nem ertem. Mikor hagy leaket? Mindig?

   
Asylum - Törzstag | 5455 hsz       Online status #166311   2011.10.06 15:03 GMT+1 óra  
A vector oke de pl. a list es az xtree (set, map, stb.) memory leaket hagy maga utan, erre erdemes szamitani.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
proof88 - Törzstag | 530 hsz       Online status #166302   2011.10.06 13:23 GMT+1 óra  
Pretender - Törzstag | 2498 hsz       Online status #166301   2011.10.06 13:12 GMT+1 óra  
[OFF]
Azért fikázom, mert egyelőre röhejes dolgokat tanulunk, de egy szóval sem állítottam, hogy ez mindörökre így lesz. Sőt, vizsgaidőszakban sírni fog a szám, hogy jajj de nehéz!
[/OFF]


Akkor ezentúl ígérem, próbálok tagfüggvényt írni Én mindenesetre minden tagfüggvényt (és metódust) ha van visszatérési értéke, ha csak void, "UpperCamelCase"-ben írok (nem is tudtam, hogy így hívják)

   
proof88 - Törzstag | 530 hsz       Online status #166300   2011.10.06 13:04 GMT+1 óra  
MethodName()

na most ha beléd akarnék kötni, márpedig nem tudom észrevetted-e hogy folyton beléd kötök a fórumon, mert fikázod az IK-t, és az egészből sörözés lesz, mert amúgy kíváncsi lennék melyik suhanc vagy a sok közül

Szóval, nálam az a szabály, hogy csak a void tagfüggvények kezdődnek nagybetűvel, azaz ahogy írtad a MethodName-et, UpperCamelCase. De ha van visszatérési értéke, akkor methodName lesz, azaz lowerCamelCase.

A másik, hogy eredetileg csak a virtuális tagfüggvényeket nevezzük metódusoknak. Szóval nem minden tagfüggvény metódus, de minden metódus tagfüggvény. Persze ma már sokan, többek között én is, minden tagfüggvényre a metódus szót használom. Pedig elég értelmetlen az a kifejezés, hogy "virtuális metódus", mivel a metódus eleve azt jelenti h virtuális tagfüggvény, na de érted amit mondok. Mióta ezt olvastam, azóta kioktatom az embereket és próbálom szabályszerűen használni én is.

PR00F voltam, sziasztok!
   
Pretender - Törzstag | 2498 hsz       Online status #166295   2011.10.06 11:45 GMT+1 óra  
Igen, azt tudom, hogy nem 1-el növeli... nekem is amúgy duplázás rémlik, alapból viszont mintha 4-ről indulna, nem 2-ről, de ez igazából lényegtelen. Nézegettem az std::vector-t a c++ reference-ben, itt (is) írják, hogy mi mit csinál.

   
lezli01 - Tag | 190 hsz       Online status #166294   2011.10.06 11:42 GMT+1 óra  
Azt nem tudom, hogy resize-nál pontosan annyit foglal-e le a vektor, de ha egy üres vectorba push__back()-elsz és már nincs hely, akkor nem egyel fogja növelni a méretet, hanem ha jól rémlik duplázza, de a size() ettől függetlenül a rendes értéket adja vissza! A reserve ad rá módot, hogy a vektor valóban akkora legyen mint a size()-ban visszaadott érték!
   
Pretender - Törzstag | 2498 hsz       Online status #166284   2011.10.06 10:21 GMT+1 óra  
Ezt a névkonvenciót szoktam meg, ennyi. (mellesleg ez egy viszonylag hivatalos dolog, nem én találtam ki, de elég kényelmes, és egységes... meg pl. a visual assist x-ben is van egy ilyen lehetőség, hogy "Insert _ after m and shift" )
Kód:
m_Member
p_Parameter
MethodName()
CONSTANT
localVariable

   
proof88 - Törzstag | 530 hsz       Online status #166283   2011.10.06 09:56 GMT+1 óra  
miért kell ilyen buzi alsóvonás karaktert használni, ha egyébként is nagybetűvel folytatod? :s�r
   
Pretender - Törzstag | 2498 hsz       Online status #166280   2011.10.06 09:21 GMT+1 óra  
@lezli01: az eredmény ugyan az, mert:
@zeller: true

ha a resize-nak paraméterként nagyobb számot adunk meg, mint a jelenlegi méret, akkor meghív annyi insertet a default constructorral, amennyit mi megadtunk neki. Ezért mivel arra "rá" new-olok, így memóriaszemét lesz belőle, amit nem szabadítottam fel. Van a resize-nak 2. paramétere, ahol meg lehet adni, hogy mit inserteljen, oda próbáltam 0-t (nullt) írni, de az sem segített. Így végül is marad a push_back a for ciklusban

   
zeller - Törzstag | 470 hsz       Online status #166279   2011.10.06 09:17 GMT+1 óra  
Aha, ja. A resize meghivja a default ctort, ha nagyobbra csinalod, es az igy letrehozott objektum fog elmaszni a memoryleakbe, ha az elemet new-val felulirod. True?

   
lezli01 - Tag | 190 hsz       Online status #166278   2011.10.06 09:14 GMT+1 óra  
Próbáld ezt iniciáláskor:

Kód:
m_Meshes.resize(m_NumMeshes);
m_Meshes.reserve( m_Meshes.size() );
m_Meshes[i] = new Mesh(m_Device, name);
   
Pretender - Törzstag | 2498 hsz       Online status #166276   2011.10.06 08:49 GMT+1 óra  
Fura...
van egy vectorom Mesh-ből (std::vector<Mesh*> ), ez az m_Meshes. Néztem, hogy memory leak van, gondoltam kiderítem, hogy mi a fene... Most már semmit nem csinálok, de 56 byte még így is marad..
Betöltéskor ennyi:
Kód:
m_Meshes.resize(m_NumMeshes);
m_Meshes[i] = new Mesh(m_Device, name);

A végén pedig
Kód:
for (int i = 0; i != m_Meshes.size(); i++)
{
    delete m_Meshes[i];
    m_Meshes[i] = 0;
}
m_Meshes.clear();
std::vector<Mesh*>().swap(m_Meshes);

A Mesh osztály konstruktora és destruktora ennyi:
Kód:
Mesh::Mesh(IDirect3DDevice9 *p_Device, const std::string &p_Name)
{
    m_Device = p_Device;
    m_Name = p_Name;

    m_NumVertices = 0;
    m_NumTriangles = 0;

    m_VertexBuffer = 0;
    m_IndexBuffer = 0;
    m_SizeInBytes = 0;
}

Mesh::~Mesh()
{
    //release index buffer
    if (m_IndexBuffer)
        m_IndexBuffer->Release();
    m_IndexBuffer = 0;

    //release vertex buffer
    if (m_VertexBuffer)
        m_VertexBuffer->Release();
    m_VertexBuffer = 0;
}

De a destruktorban a Release meg sem hívódik, mert null-ok (ugyanis csak a konstruktort hívom meg jelenleg...)

Hol a hiba?

szerk.:
Ja, és ezt kapom a legvégén (a return 0 előtt van)
Kód:
Detected memory leaks!
Dumping objects ->
{165} normal block at 0x003F81C0, 56 bytes long.
Data: <            mesh> 20 DA 16 00 00 00 00 00 CD CD CD CD 6D 65 73 68
Object dump complete.


szerk.2.: (megoldás)
áhá! a resize, meg az i-edik elem new-olása együtt nem jó ötlet. Tééényleg

   
JagdTiger - Tag | 6 hsz       Online status #166255   2011.10.05 15:07 GMT+1 óra  
Végülis vektorra le van implementálva, ennyi erővel mátrixra is simán lehet

   
Joga - Törzstag | 1791 hsz       Online status #166253   2011.10.05 14:33 GMT+1 óra  
Ilyesmire jól jöhet am egy 2D-s tömb osztály. biztonságosabb, szebb, meg minden
(ಠ ›ಠ) Stewie!

   
Asylum - Törzstag | 5455 hsz       Online status #166223   2011.10.05 08:13 GMT+1 óra  
Nagyon nem ugyanaz a ketto.

Kód:
int[i][j] egy memoriaterulet
int** szet van  (lehet) szorva
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
HomeGnome - Szerkesztő | 2919 hsz       Online status #166222   2011.10.05 07:57 GMT+1 óra  
Nem igazán értem ezt a bűvészkedést, de n dimenziós tömbnél honnan tudná a fordító, hogy mekkora egy "sorhossz"? Na mind1, nekem ez magas.

Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
   
zeller - Törzstag | 470 hsz       Online status #166219   2011.10.05 07:49 GMT+1 óra  
HG: gyk, igen.
Ha *(i+3) ==i[3], akkor elvarom, hogy a 2D analogia fennalljon. Ill az nD is. Na jo, ez nem teljesen vag egybe a felvetett problemaval...

Na altatas kozben rajottem. A memoriafoglalas linearis...

Ezt a hozzászólást zeller módosította (2011.10.05 08:18 GMT+1 óra, ---)

   
Pretender - Törzstag | 2498 hsz       Online status #166218   2011.10.05 07:46 GMT+1 óra  
@HG: szerintem arra gondolt, hogy egy 2d-s tömböt lehet így is írni:
Kód:
int** tomb = new int[x][y];

és akkor máris "mutatóra mutató mutató"

   
HomeGnome - Szerkesztő | 2919 hsz       Online status #166217   2011.10.05 07:39 GMT+1 óra  
Mármint hogy a kétdimenziós tömb az miért nem egy mutatóra mutató mutató? Vagy mivan?

Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
   
zeller - Törzstag | 470 hsz       Online status #166213   2011.10.05 06:30 GMT+1 óra  
Tell me vaj?
Kód:
int alma[20][20];
void almaSzamlalo(int**);
almaSzamlalo(alma);

->cannot convert 'int (*)[20]' to 'int**' for argument '1'

(A megoldast tudom, csak azt nem, hogy ezt miert nem engedi a fordito)

   
zeller - Törzstag | 470 hsz       Online status #165223   2011.09.25 10:28 GMT+1 óra  
Igen, sztem is property fileokban lehet a legegyszerubben tarolni.
Vagy nezd meg a BG2 szovegszerializaciojat, azt eleg jol reverseltek a BG modderek, es eletbol vett jo pelda.

Ja, es ugy remlik nekem, hogy a boostban van property file kezeles.

Ezt a hozzászólást zeller módosította (2011.09.25 10:39 GMT+1 óra, ---)

   
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] > 30 < [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] [105] [110] [115] [120] [125] [130] [135] [140] [141]