abonnement Unibet Coolblue Bitvavo
  vrijdag 26 november 2010 @ 20:49:15 #201
189216 netolk
maar dan andersom
pi_89197521
ik kom er nu achter dat get() helemaal geen error geeft als file minder lang is maar er een waarde van -1 (int) terug geeft, dat kan gewoon in de code dus dan snap ik helemaal niet waarom mn progje flipt..
Beware of the Raping Zebra's
pi_89198559
Kun je de code posten die de file inleest?
  vrijdag 26 november 2010 @ 21:12:14 #203
189216 netolk
maar dan andersom
pi_89199130
quote:
1s.gif Op vrijdag 26 november 2010 21:04 schreef thabit het volgende:
Kun je de code posten die de file inleest?
Tuurlijk maar dat is dus redelijk lang...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "Game.h"
#include "Error.h"
#include "BitField.h"
#include <fstream>
Game::Game(const char* lvlfile,const char* optfile){ // load from file
/*    _OPTIONS = Options(optfile); */
    
    std::ifstream Read(lvlfile,std::ios::binary);
    if(Read.is_open()){
        BitField::I16 rI16;
        BitField::I32 rI32;
        try{
            /* Lvl Data */        
            /* get demensions of lvl */
            rI16.c0 = Read.get();
            rI16.c1 = Read.get();
            unsigned short _X = *(unsigned short*)(&rI16);
            rI16.c0 = Read.get();
            rI16.c1 = Read.get();
            unsigned short _Y = *(unsigned short*)(&rI16);
            
            /* allocate lvl space */
            Piece data[_X*_Y];
            
            /* get lvl data */
            for(unsigned short y=0; y < _Y; y++){
                for(unsigned short x=0; x < _X; x++){
                    data[y*_X+x].set_Fertile(Read.get());    // evt. de bools van Piece in 1 byte opslaan
                    data[y*_X+x].set_Used(Read.get());
                }
            }
            _LEVEL = Level(_X,_Y,data);
            
            /* Atmosphere Data */
            /* CO2 */
            rI32.c0 = Read.get();
            rI32.c1 = Read.get();
            rI32.c2 = Read.get();
            rI32.c3 = Read.get();
            _ATMOSPHERE.set_CO2(*(unsigned short*)(&rI32));
            /* O2 */
            rI32.c0 = Read.get();
            rI32.c1 = Read.get();
            rI32.c2 = Read.get();
            rI32.c3 = Read.get();
            _ATMOSPHERE.set_O2(*(unsigned short*)(&rI32));
            /* H2O */
            rI32.c0 = Read.get();
            rI32.c1 = Read.get();
            rI32.c2 = Read.get();
            rI32.c3 = Read.get();
            _ATMOSPHERE.set_H2O(*(unsigned short*)(&rI32));
            /* N2 */
            rI32.c0 = Read.get();
            rI32.c1 = Read.get();
            rI32.c2 = Read.get();
            rI32.c3 = Read.get();
            _ATMOSPHERE.set_N2(*(unsigned short*)(&rI32));
            /* NOx */
            rI32.c0 = Read.get();
            rI32.c1 = Read.get();
            rI32.c2 = Read.get();
            rI32.c3 = Read.get();
            _ATMOSPHERE.set_NOX(*(unsigned short*)(&rI32));
            /* O3 */
            rI32.c0 = Read.get();
            rI32.c1 = Read.get();
            rI32.c2 = Read.get();
            rI32.c3 = Read.get();
            _ATMOSPHERE.set_O3(*(unsigned short*)(&rI32));
            
            /* Player */
            rI16.c0 = Read.get();
            rI16.c1 = Read.get();
            unsigned short x = *(unsigned short*)(&rI16);
            rI16.c0 = Read.get();
            rI16.c1 = Read.get();
            unsigned short y = *(unsigned short*)(&rI16);
            _PLAYER = Player(x,y);
        }
        catch(std::ios_base::failure){
            Read.close();
            throw Error("File Corrupted");
        }
        Read.close();
    }
    else
        throw Error("Can't open Lvl File");
}
Beware of the Raping Zebra's
pi_89200770
Tjezus wat een hoop code voor zo'n simpele handeling. Zoiets moet je echt compacter proberen te schrijven, zonder alles tig keer te herhalen. Verder kan ik niet direct zien wat er fout is. Zou natuurlijk ook in dingen als Level, Player en BitField of zo kunnen zitten. Kun je dat ook misschien posten?
  vrijdag 26 november 2010 @ 22:40:54 #205
189216 netolk
maar dan andersom
pi_89205521
quote:
11s.gif Op vrijdag 26 november 2010 21:33 schreef thabit het volgende:
Tjezus wat een hoop code voor zo'n simpele handeling. Zoiets moet je echt compacter proberen te schrijven, zonder alles tig keer te herhalen. Verder kan ik niet direct zien wat er fout is. Zou natuurlijk ook in dingen als Level, Player en BitField of zo kunnen zitten. Kun je dat ook misschien posten?
Ja ik weet het maar omdat het binair is, gebruik ik bitfields om naar unsigned short te kunnen casten... hoe kan je zoiets dan compacter opschrijven??

Bitfield:
1
2
3
4
5
6
7
8
9
10
11
12
namespace BitField{
        struct I16{
            unsigned char c0:8;
            unsigned char c1:8;
        };
        struct I32{
            unsigned char c0:8;
            unsigned char c1:8;
            unsigned char c2:8;
            unsigned char c3:8;
        };
    };

Player: (weet zeker dat dit werkt apart getest)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Player{
        unsigned short _X,_Y; // location left upper corner of screen
        bool _GAMEOVER;
        
        /* Buildings */
        StockHouse _myStockHouse;
        std::vector<SawMill> _mySawMill;
        std::vector<Quarry> _myQuarry;
        
        public:
            Player();
            Player(unsigned short x,unsigned short y);
            
            ~Player(){}
            
            bool Is_GameOver(){return _GAMEOVER;}
            
            unsigned short get_X(){return _X;}
            unsigned short get_Y(){return _Y;}
            
            void Build(unsigned short x,unsigned short y);
            void Draw(); //Graphics.cpp
    };

Player::Player(unsigned short x,unsigned short y):_X(x),_Y(y){
    _myStockHouse.set_Building(_X+16,_Y+9,0,1); // staat in midden van beeld 16:9 verhouding
    _mySawMill.clear();
    _myQuarry.clear();
}

Level:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Level{
        unsigned short _X,_Y; // map demensions
        Piece *_DATA;
        
        public:
            Level():_X(0),_Y(0),_DATA(0){}
            Level(unsigned short x,unsigned short y,Piece *data):_X(x),_Y(y),_DATA(data){}
            ~Level(){delete[] _DATA; _DATA = 0;}
            
            unsigned short get_X(){return _X;}
            unsigned short get_Y(){return _Y;}
            
            Piece& operator()(unsigned short x,unsigned short y);
            Piece operator()(unsigned short x,unsigned short y) const;
            
    };


[ Bericht 19% gewijzigd door netolk op 26-11-2010 22:42:17 (Class player vergeten) ]
Beware of the Raping Zebra's
pi_89206572
Level is niet goed, je initialiseert een pointer die naar een array verwijst die je na het verlaten van de constructor van Game weggooit. Kortom, die informatie ben je dan gewoon kwijt. Daarbij wordt er in de destructor van Level ook nog een array gedeletet die niet met new is aangemaakt, naar een weggegooide datastructuur verwijst en dus volkomen ongedefineerd is. Ik denk dat het programma wel eens vast zou kunnen lopen bij het uitvoeren van deze destructor.
  vrijdag 26 november 2010 @ 23:07:55 #207
189216 netolk
maar dan andersom
pi_89207060
quote:
1s.gif Op vrijdag 26 november 2010 22:58 schreef thabit het volgende:
Level is niet goed, je initialiseert een pointer die naar een array verwijst die je na het verlaten van de constructor van Game weggooit. Kortom, die informatie ben je dan gewoon kwijt. Daarbij wordt er in de destructor van Level ook nog een array gedeletet die niet met new is aangemaakt, naar een weggegooide datastructuur verwijst en dus volkomen ongedefineerd is. Ik denk dat het programma wel eens vast zou kunnen lopen bij het uitvoeren van deze destructor.
Ow hèhè dat klinkt idd wel logisch, helemaal vergeten dat ik dat aangepast had zonder te kijken of het wel kon...

kan ik het dan zo oplossen?
1
2
3
4
Piece *data;
data = new Piece[_X*_Y];

_LEVEL = Level(_X,_Y,&data);

Want ik kan data niet deleten omdat _DATA (uit level) het zelfde gebruikt toch?
Beware of the Raping Zebra's
pi_89207524
quote:
1s.gif Op vrijdag 26 november 2010 22:40 schreef netolk het volgende:

[..]

Ja ik weet het maar omdat het binair is, gebruik ik bitfields om naar unsigned short te kunnen casten... hoe kan je zoiets dan compacter opschrijven??
Je kan bijvoorbeeld een aparte functie schrijven die als input een fstream& heeft en als output een unsigned short, en ook eentje voor een unsigned long.
  vrijdag 26 november 2010 @ 23:19:14 #209
189216 netolk
maar dan andersom
pi_89207759
quote:
1s.gif Op vrijdag 26 november 2010 23:15 schreef thabit het volgende:

[..]

Je kan bijvoorbeeld een aparte functie schrijven die als input een fstream& heeft en als output een unsigned short, en ook eentje voor een unsigned long.
Maar krijg je dan niet dat je progje het bestand opent,sluit,opent,sluit ect?
Beware of the Raping Zebra's
pi_89208152
quote:
1s.gif Op vrijdag 26 november 2010 23:07 schreef netolk het volgende:

[..]

Ow hèhè dat klinkt idd wel logisch, helemaal vergeten dat ik dat aangepast had zonder te kijken of het wel kon...

kan ik het dan zo oplossen?

[ code verwijderd ]

Want ik kan data niet deleten omdat _DATA (uit level) het zelfde gebruikt toch?
Lijkt me een foutgevoelige oplossing. Ik zou _DATA gewoon als vector<Piece> definieren en geen array Piece data[nogwat] in Game::Game aanmaken (sowieso moet je geen arrays op de stack aanmaken, kun je stack overflows van krijgen), maar ook gewoon als vector definieren (of direct _LEVEL._DATA aanspreken, gaat sneller).
pi_89208205
quote:
1s.gif Op vrijdag 26 november 2010 23:19 schreef netolk het volgende:

[..]

Maar krijg je dan niet dat je progje het bestand opent,sluit,opent,sluit ect?
Nee, je kan dat ding toch geopend houden tot hem niet meer nodig hebt. Die functie die die informatie inleest moet natuurlijk zelf geen bestanden openen en sluiten.
  vrijdag 26 november 2010 @ 23:47:49 #212
189216 netolk
maar dan andersom
pi_89209437
Ja, de oplossing werkt ook niet XD en wil ik het laten werken dan is het idd best wat gekut om voor elkaar te krijgen..

ik had me dat inderdaad ook al bedacht gewoon die Read door geven en dan moet het lukken (hoop ik) in ieder geval hartstikke bedankt voor de hulp
Beware of the Raping Zebra's
pi_89234658
Hoi, ik ben nu een programma (ContextFree heet het, ik ben de commandline aan het debuggen) geschreven in C++ aan het debuggen, omdat hij een 'gdi+ error' gaf (een invalid parameter om precies te zijn). Ik weet dat het programma wel werkt op mijn andere computer, met win vista (hij werkt niet op windows 7). Ik weet nu vrij zeker dat de error in een bepaalde functie voorkomt. Deze functie is gedefinieerd in een header file, maar als ik de header file vervang heeft dit volgens mij weinig zin, omdat de functie zelf zich in een andere file bevindt (toch?). Ik vroeg me af hoe je kan weten in welke file deze functie dan wel zit.
Finally, someone let me out of my cage
  maandag 29 november 2010 @ 11:26:51 #214
189216 netolk
maar dan andersom
pi_89290770
quote:
1s.gif Op zaterdag 27 november 2010 20:11 schreef minibeer het volgende:
Hoi, ik ben nu een programma (ContextFree heet het, ik ben de commandline aan het debuggen) geschreven in C++ aan het debuggen, omdat hij een 'gdi+ error' gaf (een invalid parameter om precies te zijn). Ik weet dat het programma wel werkt op mijn andere computer, met win vista (hij werkt niet op windows 7). Ik weet nu vrij zeker dat de error in een bepaalde functie voorkomt. Deze functie is gedefinieerd in een header file, maar als ik de header file vervang heeft dit volgens mij weinig zin, omdat de functie zelf zich in een andere file bevindt (toch?). Ik vroeg me af hoe je kan weten in welke file deze functie dan wel zit.
Als er in de header file alleen iets staat als
1void function(int par,char* string);
dan word de functie in een ander bestand gedefiniëerd. dan moet je op zoek naar iets als dit:
1
2
3
void function(int par,char* string){
      // code die iets met de parameters doet
}

Ow enne die int par, char* string zijn voorbeeld parameters ze kunnen van alles zijn
Beware of the Raping Zebra's
  maandag 29 november 2010 @ 11:30:34 #215
189216 netolk
maar dan andersom
pi_89290842
quote:
1s.gif Op vrijdag 26 november 2010 23:26 schreef thabit het volgende:

[..]

Nee, je kan dat ding toch geopend houden tot hem niet meer nodig hebt. Die functie die die informatie inleest moet natuurlijk zelf geen bestanden openen en sluiten.
Bedankt man nu is mn code even een stukje overzichtelijker :)
Beware of the Raping Zebra's
pi_89294974
quote:
1s.gif Op maandag 29 november 2010 11:26 schreef netolk het volgende:

[..]

Als er in de header file alleen iets staat als
[ code verwijderd ]

dan word de functie in een ander bestand gedefiniëerd. dan moet je op zoek naar iets als dit:

[ code verwijderd ]

Ow enne die int par, char* string zijn voorbeeld parameters ze kunnen van alles zijn
Beh ik snap er niks van. De maker heeft gereageerd met dit:
quote:
1s.gif Op zondag 28 november 2010 10:40 schreef MtnViewJohn het volgende:
...
The GDI+ png file encoder does not take any encoder parameters. So I was building an encoder parameter structure with zero parameters. This worked fine until Windows 7. With Windows 7 the png encoder fails if you provide an encoder list, even if it has zero elements. Instead you must pass a NULL pointer.
Heh, ik snap het. Ergens werd een functie aangeroepen op deze manier:
1
2
3
    EncoderParameters encoderParameters;
    encoderParameters.Count = 0;
    Status s = saveBM->Save(wpath, &encClsid, &encoderParameters);

Maar dat werkte niet volgens die gast, het moet zo:
1    Status s = saveBM->Save(wpath, &encClsid, NULL);

En nu werkt het :). Al is de commandline application wel bijna 4 keer zo groot als ik hem build op de een of andere manier :(. Maar dat is bijzaak.
Bedankt voor de hulp :).
Finally, someone let me out of my cage
pi_90225633
Ik weet niet hoe moeilijk het is, maar is er iemand die voor mij de source can compilen zodat ik de software zonder al te veel moeite kan gebruiken? Ben bezig met een project waar we van een houten picnictafel een interactieve willen maken, en tracking is dan best relaxt :P

http://sites.google.com/site/tarandeep/fingermouse
  woensdag 22 december 2010 @ 11:30:50 #218
189216 netolk
maar dan andersom
pi_90280557
quote:
1s.gif Op dinsdag 21 december 2010 11:35 schreef Flaccid het volgende:
Ik weet niet hoe moeilijk het is, maar is er iemand die voor mij de source can compilen zodat ik de software zonder al te veel moeite kan gebruiken? Ben bezig met een project waar we van een houten picnictafel een interactieve willen maken, en tracking is dan best relaxt :P

http://sites.google.com/site/tarandeep/fingermouse
De code mist libs ofzo, maar bij compileert het niet zo 1, 2, 3
Beware of the Raping Zebra's
  zondag 2 januari 2011 @ 17:55:45 #219
189216 netolk
maar dan andersom
pi_90753569
Hey ik heb een vraagje, of eigenlijk wil ik bevestiging
bij de volgende code is het toch zo dat myData ook niet meer bestaat na het aanroepen van de destructor via de pointer?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
struct Data{
    unsigned short i;
        Data():i(8){}
        ~Data(){i=0;}
};
int main(){
    Data myData;
    Data *ptr;
    ptr = &myData;
    
    std::cout << "myData: " << myData.i << '\n';
    std::cout << "ptr: " << ptr->i << '\n';
    
    ptr->~Data();
    
    std::cout << "myData: " << myData.i << '\n';
    std::cout << "ptr: " << ptr->i << '\n';
    
    return 0;
}
Beware of the Raping Zebra's
pi_90754943
Het enige wat die destructor doet is myData.i op 0 zetten, verder bestaat myData nog wel gewoon.
  zondag 2 januari 2011 @ 19:01:13 #221
189216 netolk
maar dan andersom
pi_90756396
quote:
1s.gif Op zondag 2 januari 2011 18:26 schreef thabit het volgende:
Het enige wat die destructor doet is myData.i op 0 zetten, verder bestaat myData nog wel gewoon.
ok, is er een manier om hem te verwijderen zonder met scopes te hoeven werken?
Beware of the Raping Zebra's
pi_90757043
quote:
1s.gif Op zondag 2 januari 2011 19:01 schreef netolk het volgende:

[..]

ok, is er een manier om hem te verwijderen zonder met scopes te hoeven werken?
myData op de heap aanmaken ipv. op de stack?
  zondag 2 januari 2011 @ 20:16:15 #223
189216 netolk
maar dan andersom
pi_90759893
quote:
1s.gif Op zondag 2 januari 2011 19:16 schreef TeringHenkie het volgende:

[..]

myData op de heap aanmaken ipv. op de stack?
Ja, dat zou idd kunnen want dan kan ik hem gewoon opruimen met delete toch?
Beware of the Raping Zebra's
pi_90760544
quote:
1s.gif Op zondag 2 januari 2011 20:16 schreef netolk het volgende:

[..]

Ja, dat zou idd kunnen want dan kan ik hem gewoon opruimen met delete toch?
Mits je hem aanmaakt met new. De destructor die je daar hebt is trouwens vrij zinloos: je zet iets op 0 wat je daarna toch weggooit.
  zondag 2 januari 2011 @ 21:28:52 #225
189216 netolk
maar dan andersom
pi_90765418
quote:
1s.gif Op zondag 2 januari 2011 20:27 schreef thabit het volgende:

[..]

Mits je hem aanmaakt met new. De destructor die je daar hebt is trouwens vrij zinloos: je zet iets op 0 wat je daarna toch weggooit.
Ik weet dat de destructor hier zinloos is, dacht in eerste instantie dat ie dan weggegooid werd bij het aanroepen van de destructor maar dat is dus niet zo...

Hoe kan je anders iets op de heap zetten dan?
Beware of the Raping Zebra's
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')