FOK!forum / Digital Corner / [C(++)] voor dummies - Deel 6
Gehennamaandag 9 december 2013 @ 11:00
cpp+programming+language+thesumit67.blogspot.jpg

Het topic over de programmeertalen C en C++. Als je vragen over C of C++ hebt, zit je hier goed. Natuurlijk kan je ook gewoon mee kletsen.

Let er bij het stellen van een vraag op dat je zo veel mogelijk revelante informatie geeft, zoals:
- wat je probeert te doen;
- welk besturingsysteem je hebt;
- welke compiler en versie je gebruikt;
- de eventuele foutmelding die je ziet;
- een minimaal codevoorbeeld dat je fout veroorzaakt.

FAQ

Wat is het verschil tussen C en C++?

De programmeertalen C en C++ hebben veel overeenkomsten. C++ is begonnen als een uitbreiding op C en ondersteunt bijna de volledige C-taal. Dit betekent dat een computerprogramma geschreven in C meestal ook een geldig C++-programma is.

C++ heeft onderdelen aan de C-taal toegevoegd en ondersteunt verschillende programmeerstijlen beter. C++ heeft onder andere sterkere typechecking, betere manieren om data te encapsuleren en eenvoudigere structuren om algemene code te schrijven. C is echter nog steeds beter ondersteund op 'afwijkende' platformen en wordt mede daarom nog veel gebruikt.

Zie Stroustrups FAQ voor meer informatie.

Ik wil beginnen met C of C++; welke moet ik kiezen?

Dat hangt van jou af: er is geen direct 'betere' keuze. Je hoeft zeker geen C te leren voordat je aan C++ begint: het is waarschijnlijk zelfs beter van niet. Zorg in de eerste plaats voor een goed leerboek, de online informatie en 'cursussen' laat vaak te wensen over voor de beginneling.

Wat is een goed boek voor C of C++

Zie wederom Stroustrups FAQ.

Links

Naslagwerken

C/C++ Reference
The C Library Reference Guide
C++ Documentation
C++ Annotations

Achtergrond
The Association of C and C++ Users
Stroustrup's homepage

Deze OP vind je hier.
Gehennamaandag 9 december 2013 @ 11:00
Ik maakte 'm vol, hier verder :)
Holy_Goatmaandag 9 december 2013 @ 11:02
quote:
5s.gif Op maandag 9 december 2013 10:56 schreef Ai_KaRaMBa het volgende:
Ik mis een betje waarom je uberhaubt met OpenCV matrices aan het werken bent. Je lijkt de matrix te 'misbruiken' als canvas van 320x240 pixels, en daarmee ben je opzoek naar optimalisaties omdat het blijkbaar niet snel genoeg is? Wat doet OpenCV preceis voor je in deze casus?

Ik zou zeggen dat als je een 'echte' canvas alloceerd (aaneengesloten blok geheugen, wat een twee-dimensionale array van (signed) integers representeerd), dat dat veel sneller en overzichtelijker werkt?
[ code verwijderd ]

Je hebt deels gelijk. Maar momenteel gebruik ik ook nog best een flink aantal OpenCV functies die ik er op termijn uit wil mikken. Voorbeeld hiervan is dat ik met Opencv gelijk een eenvoudige grafische output heb. Andere dingen die ik nu nog gebruik zijn alle gemakken die bij OpenCV zitten zoals resize functie, transpose, floodfill...

Ik ben bezig met een Depth Sensor van Xtion. Die gebruikt OpenNI, en dan is het wel makkelijk om direct zijn data in een OpenCV container te flikkeren. Maar je hebt wel gelijk denk ik, wellicht is het beter dat hele OpenCV er tussenuit te gooien.

quote:
0s.gif Op maandag 9 december 2013 11:00 schreef Gehenna het volgende:

[..]

oh wacht daar heb je gelijk in idd (Ik ben net wakker :')), hij gaat bij die 2e natuurlijk de alle statements door als waarde==0. Dan zou idd die eerste wellicht de betere keuze zijn..
Maar als die eerste statement leeg is haalt de compiler m weg?
Ai_KaRaMBamaandag 9 december 2013 @ 11:04
Ik ken OpenCV verder niet, maar als je daarin integer matrices kan definieren, en je kan idd direct de elementen adresseren (zonder de [] overload bij iedere access aan te hoeven roepen), is dat natuurlijk effectief hetzelfde.

Echter, wat je een aantal posts geleden aangaf, is dat 1 keer een pointer fetchen en de ++en in een loop niet lijkt te werken...
Gehennamaandag 9 december 2013 @ 11:05
quote:
0s.gif Op maandag 9 december 2013 11:02 schreef Holy_Goat het volgende:

[..]

Maar als die eerste statement leeg is haalt de compiler m weg?
Nee ik las verkeer

Hier wel:
1
2
3
4
If (A)
    //Doe niets
if(B)
    DoeIets()

maar hier niet:
1
2
3
4
if (A)
    //Doe niets
else if (B)
    DoeIets()
Holy_Goatmaandag 9 december 2013 @ 11:06
quote:
0s.gif Op maandag 9 december 2013 11:04 schreef Ai_KaRaMBa het volgende:
Ik ken OpenCV verder niet, maar als je daarin integer matrices kan definieren, en je kan idd direct de elementen adresseren (zonder de [] overload bij iedere access aan te hoeven roepen), is dat natuurlijk effectief hetzelfde.

Echter, wat je een aantal posts geleden aangaf, is dat 1 keer een pointer fetchen en de ++en in een loop niet lijkt te werken...
Dat lijkt inderdaad niet te werken. Per rij een pointer fetchen wel. Maar kan aan mij liggen
Ai_KaRaMBamaandag 9 december 2013 @ 11:06
quote:
0s.gif Op maandag 9 december 2013 11:02 schreef Holy_Goat het volgende:
[..]

Maar als die eerste statement leeg is haalt de compiler m weg?
Dat maakt volgens mij niets (of nauwelijks iets) uit. Branch prediction in de CPU zorgt ervoor dat je daar niet op deze manier overna hoeft te denken. (de CPU weet welke jumps er vaak en minder vaak worden genomen, en zal verder 'vooruit werken' in het pad waarin hij denkt te gaan springen.
Gehennamaandag 9 december 2013 @ 11:10
quote:
0s.gif Op maandag 9 december 2013 11:06 schreef Ai_KaRaMBa het volgende:

[..]

Dat maakt volgens mij niets (of nauwelijks iets) uit. Branch prediction in de CPU zorgt ervoor dat je daar niet op deze manier overna hoeft te denken. (de CPU weet welke jumps er vaak en minder vaak worden genomen, en zal verder 'vooruit werken' in het pad waarin hij denkt te gaan springen.
Dat ook nog eens idd
Holy_Goatdinsdag 10 december 2013 @ 16:01
Dummy vraag 4.

Als ik bv een loop heb die 10k keer loopt.
In die loop zit vanalles maar ook dit

1
2
3
4
if (loopafhankelijkewaarde>iets)
                {
                    somestatement=true;
                }

Loop moet niet gebreakt worden als true want er gebeurt nog vanallerlei dingen.
Dit betekent natuurlijk wel dat somestatement in potentie (bij bijvoorbeeld de helft van de loops) op true gezet wordt. Ook al is ie dit al. De binnenkant van de IF wordt dus vaak bezocht en loopafhankelijkewaarde>iets onnodig vaak geevalueerd.

Klopt dan de volgende gedachte dat dit 'optimaler' is?
1
2
3
4
if (somestatement==false && loopafhankelijkewaarde>iets)
                {
                    somestatement=true;
                }

Nu kom je maar 1 x aan de binnenkant van de if terecht, feitelijk, en de eerste is check in de if is nogal goedkoop.
GS42dinsdag 10 december 2013 @ 16:11
quote:
0s.gif Op dinsdag 10 december 2013 16:01 schreef Holy_Goat het volgende:

Klopt dan de volgende gedachte dat dit 'optimaler' is?
Tegenwoordig is dat echt niet meer te zeggen. Dit soort minimale veranderingen hebben waarschijnlijk sowieso geen invloed op je runtijd, maar met de optimalisaties die de compiler doet en de optimalisaties die de CPU er nog bovenop doet, is er werkelijk geen zinnig woord over te zeggen.

Als de code al snel genoeg is: zo simpel mogelijk laten. Als de code nog niet snel genoeg is: profilen. Leer te werken met een profiler (e.g. gprof) en gebruik die om te beslissen welke veranderingen je doorvoert.
Ai_KaRaMBadinsdag 10 december 2013 @ 16:14
Wat gs42 zegt. En bekijk ook eens de assembler output van je compiler: dat geeft ook een hoop inzicht in wat er gebeurt en wat bepaalde wijzigingen voor impact hebben.

Om terug te komen op je vraag, doe het zo:

1
2
If(loopwaarde == iets)
    Somestatement = true;
Holy_Goatdinsdag 10 december 2013 @ 16:33
quote:
0s.gif Op dinsdag 10 december 2013 16:14 schreef Ai_KaRaMBa het volgende:
Wat gs42 zegt. En bekijk ook eens de assembler output van je compiler: dat geeft ook een hoop inzicht in wat er gebeurt en wat bepaalde wijzigingen voor impact hebben.

Om terug te komen op je vraag, doe het zo:
[ code verwijderd ]

Ik ga dat met zo een profiler eens een keer proberen. Nooit geweten.

Wat betreft de 'doe het zo' : dat is toch hetzelfde gewoon als met { } ?
GS42dinsdag 10 december 2013 @ 16:48
quote:
0s.gif Op dinsdag 10 december 2013 16:14 schreef Ai_KaRaMBa het volgende:
Om terug te komen op je vraag, doe het zo:
Als ik moest gokken, denk ik dat dit het snelste is:

1somestatement |= loopafhankelijkewaarde > iets;

Aangenomen dat somestatement een bool is. Zo kan je een branch eruit halen en vervangen door een bitwise operator. Maar zoals ik al zei: geen idee of het werkelijk sneller is. Het zou me ook niets verbazen als een if sneller blijkt te zijn, bijv. door branch prediction. Altijd profilen voordat je iets "optimaliseert".

In ieder geval maak je hiermee je code een stuk minder duidelijk. :)

[ Bericht 2% gewijzigd door GS42 op 10-12-2013 16:55:10 ]
Holy_Goatdinsdag 10 december 2013 @ 16:58
quote:
0s.gif Op dinsdag 10 december 2013 16:48 schreef GS42 het volgende:

[..]

Als ik moest gokken, denk ik dat dit het snelste is:
[ code verwijderd ]

Aangenomen dat somestatement een bool is. Zo kan je een branch eruit halen en vervangen door een bitwise operator. Maar zoals ik al zei: geen idee of het werkelijk sneller is. Het zou me ook niets verbazen als een if sneller blijkt te zijn, bijv. door branch prediction. Altijd profilen voordat je iets "optimaliseert".

In ieder geval maak je hiermee je code een stuk minder duidelijk. :)
Profilen moet ik nog even induiken. Lees het een beetje door en ziet er toch ingewikkeld uit :P
Gehennadinsdag 10 december 2013 @ 17:03
quote:
0s.gif Op dinsdag 10 december 2013 16:58 schreef Holy_Goat het volgende:

[..]

Profilen moet ik nog even induiken. Lees het een beetje door en ziet er toch ingewikkeld uit :P
De basics zijn best eenvoudig. Je krijgt vrij snel inzicht waarmee je programma het meest mee bezig is :)

Gebruik je een IDE? Wellicht dat deze ook wel wat profiling functies in huis heeft
Holy_Goatdinsdag 10 december 2013 @ 17:20
quote:
0s.gif Op dinsdag 10 december 2013 17:03 schreef Gehenna het volgende:

[..]

De basics zijn best eenvoudig. Je krijgt vrij snel inzicht waarmee je programma het meest mee bezig is :)

Gebruik je een IDE? Wellicht dat deze ook wel wat profiling functies in huis heeft
Netbeans in ubuntu
Ai_KaRaMBadinsdag 10 december 2013 @ 18:08
quote:
0s.gif Op dinsdag 10 dec 2013 16:33 schreef Holy_Goat het volgende:

[..]

Ik ga dat met zo een profiler eens een keer proberen. Nooit geweten.

Wat betreft de 'doe het zo' : dat is toch hetzelfde gewoon als met { } ?
Nee, het verschil zat in de '==' ipv de '>'. Dat was onder de aanname dat loopvariabbele in stapjes van 1 oploopt (wat vaak zo is). Als je loop dat niet doet, is het waarschijnlijk zo'n complexe loop dat het herschrijven van de conditie toch geen significante optimalisatie is...
Holy_Goatdinsdag 10 december 2013 @ 20:36
quote:
0s.gif Op dinsdag 10 december 2013 17:03 schreef Gehenna het volgende:

[..]

De basics zijn best eenvoudig. Je krijgt vrij snel inzicht waarmee je programma het meest mee bezig is :)

Gebruik je een IDE? Wellicht dat deze ook wel wat profiling functies in huis heeft
Ubuntu blijkt alleen intern te profilen voor Java.

Heb nog een nieuw vraagstukje: Dummy vraag 5 alweer!

1
2
double& angle = Par.Xtion.SensorAngle;
double angle = Par.Xtion.SensorAngle;

Bij optie nummer 1 verandert de Par.Xtion.sensorangle als angle aangepast wordt. Bij optie nummer 2 niet. Is het over het algemeen beter om optie 2 te gebruiken als je niet van plan bent Par.Xtion.sensorangle aan te passen? En als ik 'angle' sowieso niet aanpas, maakt de compiler er dan stiekem sowieso een reference van?

as in: daar zit waarschijnlijk ook minimaal verschil in als je miljoenmiljard keer berekeningen doet met waarde angle? De eerste maakt een verwijzing, de tweede kopieert daadwerkelijk de data. Ik kan mij voorstellen dat als de data een dikke vette matrix is het aantrekkelijker wordt om altijd met & te werken, maar hoe zit dat als het gewoon een int waarde is, bijvoorbeeld?
Toryudinsdag 10 december 2013 @ 20:54
Mijns inziens is nr 2 de standaard manier. References gebruik ik nooit in zo'n situatie. Het is vervelend als je overal in je code references naar (private) member data achterlaat. Maakt debuggen lastig (huh? wie heeft die angle aangepast??) en druist tegen de principes van OOP in.
Wat betreft performance maakt het niets uit, daar zorgt de compiler wel voor.

Voor zover ik het begrepen heb: Een & werkt met een pointer naar de waarde. Deze pointer is ook een int. Dus bij int's geen het geen voordeel.

[ Bericht 0% gewijzigd door Toryu op 10-12-2013 21:44:51 ]
GS42dinsdag 10 december 2013 @ 21:15
quote:
0s.gif Op dinsdag 10 december 2013 20:36 schreef Holy_Goat het volgende:
Is het over het algemeen beter om optie 2 te gebruiken als je niet van plan bent Par.Xtion.sensorangle aan te passen?
In principe maak je er dan een const reference van. Zo geef je aan dat je de waarde niet aan gaat passen en hoef je niet het hele object te kopieren. Bij fundamentele types heeft het maken van een referentie niet zoveel zin, en dus zou ik hier een const double gebruiken:

1double const angle = Par.Xtion.SensorAngle;
Holy_Goatdinsdag 10 december 2013 @ 21:18
quote:
0s.gif Op dinsdag 10 december 2013 21:15 schreef GS42 het volgende:

[..]

In principe maak je er dan een const reference van. Zo geef je aan dat je de waarde niet aan gaat passen en hoef je niet het hele object te kopieren. Bij fundamentele types heeft het maken van een referentie niet zoveel zin, en dus zou ik hier een const double gebruiken:
[ code verwijderd ]

Oei, kun je me iets meer hier over uitleggen?
Ik volg even de link niet tussen const reference en bv const double.

Dus als ik angle niet aan ga passen in de code, en sensorangle al helemaal niet,
is het dan niet (eigenlijk) hetzelfde om const reference of const double te doen?
GS42dinsdag 10 december 2013 @ 21:26
quote:
0s.gif Op dinsdag 10 december 2013 21:18 schreef Holy_Goat het volgende:

[..]

Oei, kun je me iets meer hier over uitleggen?
Ik volg even de link niet tussen const reference en bv const double.

Dus als ik angle niet aan ga passen in de code, en sensorangle al helemaal niet,
is het dan niet (eigenlijk) hetzelfde om const reference of const double te doen?
De meerwaarde van een referentie is dat je een object zonder te kopieren door kunt geven. Dit doe je (hopelijk) bij functies door `std::string const &` als parameter te hebben in plaats van gewoon een `std::string`. Dit gaat ten koste van een (onzichtbare) indirectie.

Bij hele kleine objecten (zoals de fundamentele datatypes) is dit kopieren niet duur en meestal te prefereren boven de indirectie.

Qua functionaliteit is het precies hetzelfde: je hebt de waarde een naam gegeven en je kan 'et alleen lezen, niet veranderen.
t4rt4rusdinsdag 10 december 2013 @ 21:51
quote:
0s.gif Op dinsdag 10 december 2013 21:15 schreef GS42 het volgende:

[..]

In principe maak je er dan een const reference van. Zo geef je aan dat je de waarde niet aan gaat passen en hoef je niet het hele object te kopieren. Bij fundamentele types heeft het maken van een referentie niet zoveel zin, en dus zou ik hier een const double gebruiken:
[ code verwijderd ]

+1 voor const na de type, daar hou ik van. :)

Bij fundamentele types gewoon by value doen, tenzij je een reference nodig hebt.
En bij andere types by const reference, tenzij je echt een copy wil. (of niet const)
Holy_Goatwoensdag 11 december 2013 @ 05:48
Fungeert die const alleen als waarborg dat je ook echt nergens probeert de waarde aan te passen of is er nog een ander doel mee gemoeid?
trancethrustwoensdag 11 december 2013 @ 09:36
quote:
0s.gif Op woensdag 11 december 2013 05:48 schreef Holy_Goat het volgende:
Fungeert die const alleen als waarborg dat je ook echt nergens probeert de waarde aan te passen of is er nog een ander doel mee gemoeid?
De compiler kan die belofte gebruiken om de boel wat te optimaliseren.

Bij een functiecall hoeft een const parameter bijvoorbeeld niet gecopieerd te worden.
trancethrustwoensdag 11 december 2013 @ 09:38
Zie ook http://www.parashift.com/c++-faq/const-correctness.html overigens, sowieso een aanrader van een site.
netolkwoensdag 11 december 2013 @ 20:31
quote:
0s.gif Op vrijdag 6 december 2013 21:38 schreef robin007bond het volgende:
Op de een of andere manier gaat OOP mij moeilijker af in C++ dan in Java. De header-files vind ik zo'n zooitje.

Als ik een C+=2 zou maken zouden die header files er definitief uit mogen. :P
Nja, als je gewoon fatsoenlijk je header files bouwt vind ik ze wel beter dan die packet troep in java
Toryuwoensdag 11 december 2013 @ 20:43
Je kunt ook gewoon alles in de header plempen. Maakt het niet echt overzichtelijker, behalve misschien wanneer je templates gebruikt. Compilen duurt alleen wel wat langer dan.
trancethrustwoensdag 11 december 2013 @ 22:03
quote:
0s.gif Op vrijdag 6 december 2013 21:38 schreef robin007bond het volgende:
Op de een of andere manier gaat OOP mij moeilijker af in C++ dan in Java. De header-files vind ik zo'n zooitje.

Als ik een C+=2 zou maken zouden die header files er definitief uit mogen. :P
Dat kan in gewoon C++ ook prima. Als je het eens probeert in een iets groter project zie je ook meteen waarom ze beter wel gebruikt worden ;)
#ANONIEMwoensdag 11 december 2013 @ 22:31
quote:
2s.gif Op woensdag 11 december 2013 22:03 schreef trancethrust het volgende:

[..]

Dat kan in gewoon C++ ook prima. Als je het eens probeert in een iets groter project zie je ook meteen waarom ze beter wel gebruikt worden ;)
Ik weet dat het kan, maar dan wordt het snel een rotzooitje. :P

Plus dat je methodes in een goede volgorde moeten staan.
trancethrustwoensdag 11 december 2013 @ 22:38
quote:
0s.gif Op woensdag 11 december 2013 22:31 schreef robin007bond het volgende:

[..]

Ik weet dat het kan, maar dan wordt het snel een rotzooitje. :P

Plus dat je methodes in een goede volgorde moeten staan.
Dus je vindt het met en zonder header-files een zooitje?
#ANONIEMwoensdag 11 december 2013 @ 22:41
quote:
18s.gif Op woensdag 11 december 2013 22:38 schreef trancethrust het volgende:

[..]

Dus je vindt het met en zonder header-files een zooitje?
Eigenlijk wel.

Sorry. Het is eerder dat ik zelf moeite heb structuur aan projecten aan te brengen terwijl ik dat bij andere talen wel heb. Maar dit komt ook omdat ik niet veel ervaring heb met C++ in vergelijking met die andere talen denk ik.

Ik heb nog een goed boek hier waar ik eens doorheen moet.
t4rt4rusdonderdag 12 december 2013 @ 00:31
Ohja nu je het over boek hebt, ik zou Stroustrups nieuwe boek nog lezen...
netolkdonderdag 19 december 2013 @ 17:07
quote:
9s.gif Op woensdag 11 december 2013 22:41 schreef robin007bond het volgende:

[..]

Eigenlijk wel.

Sorry. Het is eerder dat ik zelf moeite heb structuur aan projecten aan te brengen terwijl ik dat bij andere talen wel heb. Maar dit komt ook omdat ik niet veel ervaring heb met C++ in vergelijking met die andere talen denk ik.

Ik heb nog een goed boek hier waar ik eens doorheen moet.
Java dwingt je idd echt om oop te doen. C++ totaal niet. Wat ik alleen wel echt schijt irritant vind aan Java is dat het geen pointers en references heeft. Ja ik weet ook waarom

Goed dit was mijn beklag over Java weer
t4rt4rusdonderdag 19 december 2013 @ 19:28
quote:
0s.gif Op donderdag 19 december 2013 17:07 schreef netolk het volgende:

[..]

Java dwingt je idd echt om oop te doen. C++ totaal niet. Wat ik alleen wel echt schijt irritant vind aan Java is dat het geen pointers en references heeft. Ja ik weet ook waarom

Goed dit was mijn beklag over Java weer
Alles in java is een pointer... behalve de fundamentele types (dacht ik?)
Gehennadonderdag 19 december 2013 @ 21:22
quote:
0s.gif Op donderdag 19 december 2013 19:28 schreef t4rt4rus het volgende:

[..]

Alles in java is een pointer... behalve de fundamentele types (dacht ik?)
Onderwater wel idd :)
t4rt4rusdonderdag 19 december 2013 @ 22:56
quote:
0s.gif Op donderdag 19 december 2013 21:22 schreef Gehenna het volgende:

[..]

Onderwater wel idd :)
Boven water toch ook? Niet expliciet maar impliciet.

Maar euh, C++? :P
netolkdonderdag 19 december 2013 @ 23:36
quote:
0s.gif Op donderdag 19 december 2013 19:28 schreef t4rt4rus het volgende:

[..]

Alles in java is een pointer... behalve de fundamentele types (dacht ik?)
Theoretisch wel ja, maar het werkt toch niet (altijd) zoals ik het zou verwachten (en in C++ zeker wel aan de praat zou krijgen)

Ach project duurt nog maar een paar weekjes en dan ben ik er weer vanaf *O*
netolkdinsdag 29 april 2014 @ 16:54
Even een vraagje:
Ik heb een vector iterator en die laat m'n programma crashen als ik iets toevoeg aan die vector.
Maar dat doet ie alleen als ik bepaalde fields van het object gebruik:

1
2
3
4
5
6
7
8
9
10
11
class InputField{
        std::string _DATA;
        unsigned short _X,_Y; // location
        unsigned short _DISPLAY_LENGTH;
        unsigned short _MAX_LENGTH; // 0 if no max length
        std::string _ONLY_ALLOWED; // empty if there are no restrictions for input
        bool _SELECTED;
        
        public:
            InputField(unsigned short x,unsigned short y,unsigned short display_length,bool selected=false,unsigned short max_length=0,std::string only_allowed="");
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class InputFieldController{
        std::vector<InputField> _INPUTFIELDS;
        std::vector<InputField>::iterator _SELECTED;
        
        public:
            void InputFieldController::push_back(InputField push){
                _INPUTFIELDS.push_back(push);
                if(push.getSelected()){
                    if(_INPUTFIELDS.size() == 1){
                        _SELECTED = _INPUTFIELDS.begin();
                        return;
                    }
                    _SELECTED->setSelected(false);
                    _SELECTED = _INPUTFIELDS.end()-1;
                }
            }
};
Als ik dit doe dan werkt het gewoon
1
2
3
4
myInputFields.push_back(InputField(12,1,35,true));
myInputFields.push_back(InputField(74,1,5));
myInputFields.push_back(InputField(29,2,50));
    

maar als ik dit probeer dan crashed ie
1
2
myInputFields.push_back(InputField(10,1,70,true));
myInputFields.push_back(InputField(28,3,2,false,2,"0123456789"));

Ik vermoed dus dat ie de string niet zo leuk vind maar ik begrijp niet waarom, kan iemand mij uitleggen waarom het niet werkt?
t4rt4rusdinsdag 29 april 2014 @ 19:01
quote:
0s.gif Op dinsdag 29 april 2014 16:54 schreef netolk het volgende:
Even een vraagje:
Ik heb een vector iterator en die laat m'n programma crashen als ik iets toevoeg aan die vector.
Maar dat doet ie alleen als ik bepaalde fields van het object gebruik:
[ code verwijderd ]

[ code verwijderd ]

Als ik dit doe dan werkt het gewoon
[ code verwijderd ]

maar als ik dit probeer dan crashed ie
[ code verwijderd ]

Ik vermoed dus dat ie de string niet zo leuk vind maar ik begrijp niet waarom, kan iemand mij uitleggen waarom het niet werkt?
Heb je ook nog errors?
netolkdinsdag 29 april 2014 @ 19:37
quote:
0s.gif Op dinsdag 29 april 2014 19:01 schreef t4rt4rus het volgende:

[..]

Heb je ook nog errors?
Nee, alles compiled gewoon en dan APPCRASH. Dus dan krijg je zo'n popup ding van windows met dat het niet meer werkt.

Ik denk dus dat die iterator niet valid meer is maar ik snap dus niet waarom hij bij de andere wel gewoon valid is
t4rt4rusdinsdag 29 april 2014 @ 19:38
quote:
0s.gif Op dinsdag 29 april 2014 19:37 schreef netolk het volgende:

[..]

Nee, alles compiled gewoon en dan APPCRASH. Dus dan krijg je zo'n popup ding van windows met dat het niet meer werkt.

Ik denk dus dat die iterator niet valid meer is maar ik snap dus niet waarom hij bij de andere wel gewoon valid is
Ja dus wat is je error?

Segmentation fault?
Maar om dat te krijgen moet je ook iets dereferecen, dus wat doe je daarna?

-edit-

In het vervolg moet je even een testcase schrijven voor ons :)
http://ideone.com/RPGgAC

valgrind
quote:
==19390== Invalid write of size 1
==19390== at 0x4009AF: InputField::setSelected(bool) (foo.cxx:10)
==19390== by 0x400A31: InputFieldController::push_back(InputField) (foo.cxx:25)
==19390== by 0x400927: main (foo.cxx:35)
==19390== Address 0x0 is not stack'd, malloc'd or (recently) free'd
Je probleem is _selected->setSelected(false);
_selected wijst nergens naar, dus segmentation fault ;)

Dus wat je moet doen is eerst kijken of _selected ergens naar wijst.
Daarnaast als je een push_back doet hoeft je _selected ook al niet meer valid te zijn.

-edit- (nog geen reactie, dus ga ik maar even verder...)
Je kan hier beter geen iterator gebruiken, die dingen zijn om te iteraten niet om een element bij te houden in een vector.
Een index in de vector kan je wel bij houden, wordt het ook een stuk simpeler van.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct InputFieldController{
        std::vector<InputField> _inputfields;
        unsigned _select;
        
        void push_back(InputField field)
        {
            if(field.getSelected())
            {
                if(!_inputfields.empty())
                    _inputfields[_select].setSelected(false);
            }
            _inputfields.push_back(field);
            _select = _inputfields.size() - 1;
        }
};


[ Bericht 12% gewijzigd door t4rt4rus op 29-04-2014 21:05:53 ]
netolkwoensdag 30 april 2014 @ 10:43
quote:
0s.gif Op dinsdag 29 april 2014 19:38 schreef t4rt4rus het volgende:

[..]

Ja dus wat is je error?

Segmentation fault?
Maar om dat te krijgen moet je ook iets dereferecen, dus wat doe je daarna?

-edit-

In het vervolg moet je even een testcase schrijven voor ons :)
http://ideone.com/RPGgAC

valgrind

[..]

Je probleem is _selected->setSelected(false);
_selected wijst nergens naar, dus segmentation fault ;)

Dus wat je moet doen is eerst kijken of _selected ergens naar wijst.
Daarnaast als je een push_back doet hoeft je _selected ook al niet meer valid te zijn.

-edit- (nog geen reactie, dus ga ik maar even verder...)
Je kan hier beter geen iterator gebruiken, die dingen zijn om te iteraten niet om een element bij te houden in een vector.
Een index in de vector kan je wel bij houden, wordt het ook een stuk simpeler van.
[ code verwijderd ]

hmm, wat ik al vermoedde dus die _SELECTED is niet valid maar die iterators kunnen dus invalid worden als je iets toevoegd?
Dacht dat het eigenlijk gewoon soort van pointers waren met wat meer opties :X
Anyway bedankt denk dat ik idd dan maar een index bijhoud
Toryuwoensdag 30 april 2014 @ 21:05
Vectors doen intern een allocatie om een bepaald aantal elementen op te kunnen slaan. Wanneer je elementen toevoegt, worden deze in dat stukje geheugen opgeslagen. Naarmate je meer elementen toevoegen, zal dit geheugen vol raken. Op dat moment zal de vector een groter stuk geheugen alloceren en alle oude elementen daarheen verplaatsen. Op dat moment worden iterators ongeldig.
t4rt4rusdonderdag 1 mei 2014 @ 15:46
quote:
0s.gif Op woensdag 30 april 2014 10:43 schreef netolk het volgende:

[..]

hmm, wat ik al vermoedde dus die _SELECTED is niet valid maar die iterators kunnen dus invalid worden als je iets toevoegd?
Dacht dat het eigenlijk gewoon soort van pointers waren met wat meer opties :X
Anyway bedankt denk dat ik idd dan maar een index bijhoud
Ohja en misschien niet volledig hoofdletters gebruik in variabelen.
Lijkt net of je allemaal macro's gebruikt. :P
defineazdonderdag 1 mei 2014 @ 20:56
Tvp, moet nu voor een vak aan Minix sleutelen, best leuk maar het kost zo veel tijd :(
netolkmaandag 5 mei 2014 @ 07:33
quote:
0s.gif Op donderdag 1 mei 2014 15:46 schreef t4rt4rus het volgende:

[..]

Ohja en misschien niet volledig hoofdletters gebruik in variabelen.
Lijkt net of je allemaal macro's gebruikt. :P
hmm, goed punt.
Meestal doe ik dat om aan te geven wat in een class staat en wat niet maar met macro's doe je idd het zelfde...
netolkvrijdag 23 mei 2014 @ 17:24
Weet iemand hier hoe ik onder Windows (in console) een nieuwe screenbuffer kan maken waar std::cout << wel naar kan schrijven?

Ik heb nu een nieuwe buffer aangemaakt [daar kan ik ook naar schrijven via WriteConsoleOutput(...)]
Ook heb ik het volgende in m'n code:
1
2
3
SetStdHandle(STD_INPUT_HANDLE,hstdOut)
SetStdHandle(STD_OUTPUT_HANDLE,hstdOut)
SetStdHandle(STD_ERROR_HANDLE,hstdOut)
Alleen std::cout pakt hij nu dus niet.
De data die ik in std::cout stop word wel ergens heen geschreven want als ik de ActiveBuffer weer naar de originele terug zet verschijnt de data wel ineens.

moet ik nog iets ander doen dan SetStdHandle(...) of is die gewoon kapot bij minGW?
t4rt4rusvrijdag 23 mei 2014 @ 17:40
C++ kent geen Windows. :P

Ho dat is wat ze in ##c++ altijd zeggen tegen dit soort vragen.

Maar geen idee. Even op cppreference.com kijken.

Waarom doe je dit eigenlijk?
En wat doe je precies?
netolkvrijdag 23 mei 2014 @ 22:28
Op internet heb ik niks kunnen vinden er over.

Maar ik heb een soort van alert box gemaakt zodat ik meldingen kan geven maar daarna moet het oude scherm weer terug gezet worden (dus zonder de alert box er overheen getekend)
En ook om de buffer en grote van 80 bij 25 te geven zodat de scroll balk verdwijnt
Toryuzondag 25 mei 2014 @ 14:48
Wat is een goede IDE voor Linux? Ik gebruik nu Eclipse CDT, maar ik vind het traag en niet gebruiksvriendelijk. Zeker in vergelijking met VS op Windows. Wat raden jullie aan?
#ANONIEMzondag 25 mei 2014 @ 15:00
quote:
0s.gif Op zondag 25 mei 2014 14:48 schreef Toryu het volgende:
Wat is een goede IDE voor Linux? Ik gebruik nu Eclipse CDT, maar ik vind het traag en niet gebruiksvriendelijk. Zeker in vergelijking met VS op Windows. Wat raden jullie aan?
Speciaal voor C++? QTCreator is denk ik wel de prettigste. Die IDE kun je ook gebruiken zonder dat je per se het QT framework zelf moet gebruiken in je applicatie.
Toryuzondag 25 mei 2014 @ 15:01
Ah, die kan ik wel proberen inderdaad. Ik had al naar netbeans en code::blocks gekeken, maar vond ze beide tegenvallen.
#ANONIEMzondag 25 mei 2014 @ 15:05
quote:
0s.gif Op zondag 25 mei 2014 15:01 schreef Toryu het volgende:
Ah, die kan ik wel proberen inderdaad. Ik had al naar netbeans en code::blocks gekeken, maar vond ze beide tegenvallen.
Succes. Ik ben benieuwd naar je ervaring met QTCreator. Daar ben ik wel benieuwd naar.

Wat je niet prettig vindt aan Eclipse snap ik eerlijk gezegd niet zo. Erg traag is het niet en gebruiksvriendelijk vind ik het wel. Net als NetBeans overigens.

[ Bericht 0% gewijzigd door #ANONIEM op 25-05-2014 15:05:56 ]
netolkzondag 25 mei 2014 @ 15:56
quote:
11s.gif Op zondag 25 mei 2014 15:05 schreef robin007bond het volgende:

[..]

Succes. Ik ben benieuwd naar je ervaring met QTCreator. Daar ben ik wel benieuwd naar.

Wat je niet prettig vindt aan Eclipse snap ik eerlijk gezegd niet zo. Erg traag is het niet en gebruiksvriendelijk vind ik het wel. Net als NetBeans overigens.
Ik snap het wel Vroeger gebruikte ik netbeans voor java was takke traag, toen ben ik over gestapt naar notepad++ (en c++ ). Moest laatst voor m'n minor java code schrijven in eclipse dat was wel redelijk al deed ik vooral in het begin het liever in notepad++.
C++ doe ik nog steeds zonder IDE zie de meerwaarde er niet zo van
#ANONIEMzondag 25 mei 2014 @ 15:57
quote:
0s.gif Op zondag 25 mei 2014 15:56 schreef netolk het volgende:

[..]

Ik snap het wel Vroeger gebruikte ik netbeans voor java was takke traag, toen ben ik over gestapt naar notepad++ (en c++ ). Moest laatst voor m'n minor java code schrijven in eclipse dat was wel redelijk al deed ik vooral in het begin het liever in notepad++.
C++ doe ik nog steeds zonder IDE zie de meerwaarde er niet zo van
Ja, meestal gebruik ik ook gewoon een tiling window manager en vim. Dat is goed genoeg. :+
Drxxzondag 25 mei 2014 @ 18:27
quote:
0s.gif Op zondag 25 mei 2014 15:56 schreef netolk het volgende:

[..]

Ik snap het wel Vroeger gebruikte ik netbeans voor java was takke traag, toen ben ik over gestapt naar notepad++ (en c++ ). Moest laatst voor m'n minor java code schrijven in eclipse dat was wel redelijk al deed ik vooral in het begin het liever in notepad++.
C++ doe ik nog steeds zonder IDE zie de meerwaarde er niet zo van
Oké, dat is vast hoe eckte pro's het doen. Maar hij vroeg wel specifiek om een IDE :P Dan vind ik het ook wel een beetje gek als je Eclipse en NetBeans niets vindt :P
netolkmaandag 26 mei 2014 @ 08:52
quote:
0s.gif Op zondag 25 mei 2014 18:27 schreef Drxx het volgende:

[..]

Oké, dat is vast hoe eckte pro's het doen. Maar hij vroeg wel specifiek om een IDE :P Dan vind ik het ook wel een beetje gek als je Eclipse en NetBeans niets vindt :P
Haha, ben maar gewoon een amateurtje hoor
thabitmaandag 26 mei 2014 @ 10:55
quote:
0s.gif Op zondag 25 mei 2014 14:48 schreef Toryu het volgende:
Wat is een goede IDE voor Linux? Ik gebruik nu Eclipse CDT, maar ik vind het traag en niet gebruiksvriendelijk. Zeker in vergelijking met VS op Windows. Wat raden jullie aan?
Voor C++ onder Linux kun je het best gewoon een goede editor en geen IDE. Visual Studio is gewoon een uitstekende IDE (en het enige goede stuk software dat Microsoft heeft voortgebracht). Maar als er geen uitstekende IDE bestaat, kun je het best geen IDE gebruiken, is mijn ervaring. Je wilt geen IDE gebruiken die "wel oké" is.
Gehennamaandag 26 mei 2014 @ 12:07
Sinds ik Sublime Text ken, heb ik niet meer (vrijwillig) een IDE gebruikt :) _O_
t4rt4rusmaandag 26 mei 2014 @ 15:57
Ik gebruik gewoon een text editor.
Gedit, geany, of gewoon nano.

Heb qtcreator ook geinstalleerd maar nog nooit gebruikt.
Toryumaandag 26 mei 2014 @ 22:30
Na een paar jaar in IDE te hebben geprogrammeerd kan ik echt niet meer zonder. Sublime Text noemt zichzelf een text editor, maar heeft alle features van een IDE (project management, code completion, debuggen etc.) dus die kan ik ook nog eens proberen.
Gehennamaandag 26 mei 2014 @ 23:27
quote:
0s.gif Op maandag 26 mei 2014 22:30 schreef Toryu het volgende:
Na een paar jaar in IDE te hebben geprogrammeerd kan ik echt niet meer zonder. Sublime Text noemt zichzelf een text editor, maar heeft alle features van een IDE (project management, code completion, debuggen etc.) dus die kan ik ook nog eens proberen.
Het is vooral de manier hoe hij met text omgaat, dat werkt echt heerlijk. Beetje lastig uit te leggen, maar dat moet je gewoon proberen.

Dingen als multiline edit:
195054-sublime-text-2-8657438886813069773.gif

_O_
Aetherdinsdag 27 mei 2014 @ 10:09
quote:
0s.gif Op maandag 26 mei 2014 22:30 schreef Toryu het volgende:
Sublime Text noemt zichzelf een text editor, maar heeft alle features van een IDE
Behalve een printfunctie :+
Gehennadinsdag 27 mei 2014 @ 10:59
quote:
7s.gif Op dinsdag 27 mei 2014 10:09 schreef Aether het volgende:

[..]

Behalve een printfunctie :+
Hé verrek, nouja nog niet nodig gehad dus :P
netolkwoensdag 28 mei 2014 @ 16:50
quote:
0s.gif Op vrijdag 23 mei 2014 17:24 schreef netolk het volgende:
Weet iemand hier hoe ik onder Windows (in console) een nieuwe screenbuffer kan maken waar std::cout << wel naar kan schrijven?

Ik heb nu een nieuwe buffer aangemaakt [daar kan ik ook naar schrijven via WriteConsoleOutput(...)]
Ook heb ik het volgende in m'n code:
[ code verwijderd ]

Alleen std::cout pakt hij nu dus niet.
De data die ik in std::cout stop word wel ergens heen geschreven want als ik de ActiveBuffer weer naar de originele terug zet verschijnt de data wel ineens.

moet ik nog iets ander doen dan SetStdHandle(...) of is die gewoon kapot bij minGW?
Heb nu ondertussen een soort van oplossing
ik onthoud nu niet de gehele oude buffer maar alleen de grote ervan. Aan het einde van mijn programma zet ik deze waarde terug
netolkzaterdag 6 september 2014 @ 12:49
Hey, ik heb een probleempje met zlib.

Op de pc waar ik het programma heb geschreven werkt het gewoon maar op een andere pc zegt ie dat hij zlib niet kan vinden. Is er in minGW een optie om de zlib in de exe te includen? (Net zoals bijvoorbeeld -static-libgcc of -static-libstdc++)
Mankezaterdag 6 september 2014 @ 13:38
Ik wil al heel lang c++ leren en Windows applicaties leren maken, wat is de beste plaats om te beginnen?
#ANONIEMzaterdag 6 september 2014 @ 13:55
quote:
1s.gif Op zaterdag 6 september 2014 13:38 schreef Manke het volgende:
Ik wil al heel lang c++ leren en Windows applicaties leren maken, wat is de beste plaats om te beginnen?
Oeh.. Hmm.

Als je echt alleen Windows applicaties maakt dan zou ik je eerder C# aanraden. Dat is toch wat makkelijker.

Ik heb het boek Accelerated C++ en dat is echt wel een aanrader.
Mano_zaterdag 6 september 2014 @ 14:38
quote:
1s.gif Op zaterdag 6 september 2014 13:38 schreef Manke het volgende:
Ik wil al heel lang c++ leren en Windows applicaties leren maken, wat is de beste plaats om te beginnen?
Ik vind Qt een erg vriendelijke kit voor C++. Er zitten een hoop objects en classes in die het gemakkelijk maken. Daarnaast is er een eenvoudig te gebruiken event-handler in in de vorm van signals. Ook threads zijn vereenvoudigd. Het enige nadeel vind ik de roll-out van een applicatie, je moet handmatig nogal wat resources verzamelen om het op andere machines te laten werken.

Op Youtube staat een uitgebreide tutorial-reeks, een goed begin imo.
trancethrustzaterdag 6 september 2014 @ 15:09
quote:
0s.gif Op zondag 25 mei 2014 15:01 schreef Toryu het volgende:
Ah, die kan ik wel proberen inderdaad. Ik had al naar netbeans en code::blocks gekeken, maar vond ze beide tegenvallen.
Code::blocks is echt matig imo. Komt over als een simpele GUI wrapper van GCC/Cygwin.

Had een gebruiker die mijn spul daar aan de praat wilde hebben, en het ding kon niet omgaan met spaties in het pad (gezet door de beste man die op Windows zat). Dat zijn dingen die een IDE gewoon zonder problemen moet kunnen. Disclaimer: sindsdien mogelijk en hopelijk wel gefixt.
#ANONIEMzaterdag 6 september 2014 @ 20:32
quote:
1s.gif Op zaterdag 6 september 2014 14:38 schreef Mano_ het volgende:

[..]

Ik vind Qt een erg vriendelijke kit voor C++. Er zitten een hoop objects en classes in die het gemakkelijk maken. Daarnaast is er een eenvoudig te gebruiken event-handler in in de vorm van signals. Ook threads zijn vereenvoudigd. Het enige nadeel vind ik de roll-out van een applicatie, je moet handmatig nogal wat resources verzamelen om het op andere machines te laten werken.

Op Youtube staat een uitgebreide tutorial-reeks, een goed begin imo.
Qt is erg tof inderdaad. Helaas wel vrij groot. :P
Mankezondag 7 september 2014 @ 16:17
Bedankt voor de tips, ik ga kijken naar qt. Dat boek accelerated c++ heb ik al 10 jaar ofzo :P moet er eens mee verder, vond console applicaties saai.
FrankRicardmaandag 8 september 2014 @ 14:05
Als je alleen voor Windows wil ontwikkelen is C# naar mijn mening een betere optie dan Qt.
- Makkelijker te leren
- Betere documentatie
- Native
- In mijn beleving wordt C# ook veel meer gebruikt/gevraagd in het bedrijfsleven
Gehennamaandag 8 september 2014 @ 16:22
quote:
0s.gif Op maandag 8 september 2014 14:05 schreef FrankRicard het volgende:
Als je alleen voor Windows wil ontwikkelen is C# naar mijn mening een betere optie dan Qt.
- Makkelijker te leren
- Betere documentatie
- Native
Dit inderdaad
quote:
- In mijn beleving wordt C# ook veel meer gebruikt/gevraagd in het bedrijfsleven
Dat ligt er wel aan in welke branche je zoekt uiteraard, maar er is in ieder geval genoeg vraag naar
Toryumaandag 8 september 2014 @ 23:24
JetBrains heeft vandaag een pre-release uitgebracht van hun nieuwe multi platform C++ IDE, genaamd CLion. Ziet er veel belovend uit: http://www.jetbrains.com/clion/
#ANONIEMmaandag 8 september 2014 @ 23:25
quote:
0s.gif Op maandag 8 september 2014 14:05 schreef FrankRicard het volgende:
Als je alleen voor Windows wil ontwikkelen is C# naar mijn mening een betere optie dan Qt.
- Makkelijker te leren
- Betere documentatie
- Native
- In mijn beleving wordt C# ook veel meer gebruikt/gevraagd in het bedrijfsleven
Mee eens eigenlijk. Al ben ik een fanatieke Linuxgebruiker, dus zou eerder iets als C++ en GTK zeggen, maar voor wat hij wil lijkt het prima.
Yuri_Boykadinsdag 7 oktober 2014 @ 20:26
Zijn er hier mensen die Sublime Text 3 op een Mac gebruiken? Iig, op Windows had ik bij een restart van het programma netjes al mijn project folders in de sidebar staan, maar bij de Mac worden ze telkens verwijderd van de sidebar, waardoor de hele sidebar leeg is na een restart.

Herkenbaar probleem, en hoe opgelost?
Gehennadinsdag 7 oktober 2014 @ 20:37
quote:
0s.gif Op dinsdag 7 oktober 2014 20:26 schreef Yuri_Boyka het volgende:
Zijn er hier mensen die Sublime Text 3 op een Mac gebruiken? Iig, op Windows had ik bij een restart van het programma netjes al mijn project folders in de sidebar staan, maar bij de Mac worden ze telkens verwijderd van de sidebar, waardoor de hele sidebar leeg is na een restart.

Herkenbaar probleem, en hoe opgelost?
Ik gebruik 'm hier bijna dagelijks, heerlijk programma.

Herken het probleem trouwen niet, bij mij onthoudt hij netjes welke files hij open heeft staan.

heb je gekeken bij je settings? Preferences -> Settings - Default

en dan checken op:
1"remember_open_files": true
Yuri_Boykadinsdag 7 oktober 2014 @ 20:38
quote:
0s.gif Op dinsdag 7 oktober 2014 20:37 schreef Gehenna het volgende:

[..]

Ik gebruik 'm hier bijna dagelijks, heerlijk programma.

Herken het probleem trouwen niet, bij mij onthoudt hij netjes welke files hij open heeft staan.

heb je gekeken bij je settings? Preferences -> Settings - Default

en dan checken op:
[ code verwijderd ]

Hmm, vreemd. Bij mij blijft ook netjes alles openstaan wanneer ik op het minnetje druk, maar wanneer ik op het kruisje druk gaat alles dus weg.

Yeah, dat staat op true. Kwam dat al op internet tegen.
Gehennadinsdag 7 oktober 2014 @ 20:39
quote:
0s.gif Op dinsdag 7 oktober 2014 20:38 schreef Yuri_Boyka het volgende:

[..]

Hmm, vreemd. Bij mij blijft ook netjes alles openstaan wanneer ik op het minnetje druk, maar wanneer ik op het kruisje druk gaat alles dus weg.

Yeah, dat staat op true. Kwam dat al op internet tegen.
check ook die andere settings daar in de buurt zoals
1"hot_exit": true
Yuri_Boykadinsdag 7 oktober 2014 @ 20:40
quote:
0s.gif Op dinsdag 7 oktober 2014 20:39 schreef Gehenna het volgende:

[..]

check ook die andere settings daar in de buurt zoals
[ code verwijderd ]

Staat ook op true, maar werkt alsnog niet. Altijd vervelend zulke probleempjes. :P
Gehennadinsdag 7 oktober 2014 @ 20:41
quote:
0s.gif Op dinsdag 7 oktober 2014 20:40 schreef Yuri_Boyka het volgende:

[..]

Staat ook op true, maar werkt alsnog niet. Altijd vervelend zulke probleempjes. :P
Hmm vreemd idd, al eens opnieuw geïnstalleerd?
Yuri_Boykadinsdag 7 oktober 2014 @ 20:43
quote:
0s.gif Op dinsdag 7 oktober 2014 20:41 schreef Gehenna het volgende:

[..]

Hmm vreemd idd, al eens opnieuw geïnstalleerd?
Damn, dan moet ik ook alle packages weer opnieuw installeren. :P Ik zal het eens proberen.
Yuri_Boykadinsdag 7 oktober 2014 @ 20:46
Nog steeds hetzelfde probleem. Erg raar.
Gehennadinsdag 7 oktober 2014 @ 21:00
quote:
15s.gif Op dinsdag 7 oktober 2014 20:46 schreef Yuri_Boyka het volgende:
Nog steeds hetzelfde probleem. Erg raar.
Ook je settings weggegooid (als je veel hebt veranderen, is een back-up uiteraard wel handig te houden :P) bij het verwijderen? Dit gebeurt standaard (verplaatsen naar de prullenmand) niet op een mac. Een tooltje als Appzapper kan daar bij helpen :)
t4rt4rusdinsdag 7 oktober 2014 @ 21:02
Nieuwe posts, gaat het niet over C++ :'(
Yuri_Boykadinsdag 7 oktober 2014 @ 21:04
quote:
0s.gif Op dinsdag 7 oktober 2014 21:00 schreef Gehenna het volgende:

[..]

Ook je settings weggegooid (als je veel hebt veranderen, is een back-up uiteraard wel handig te houden :P) bij het verwijderen? Dit gebeurt standaard (verplaatsen naar de prullenmand) niet op een mac. Een tooltje als Appzapper kan daar bij helpen :)
Even proberen.

quote:
0s.gif Op dinsdag 7 oktober 2014 21:02 schreef t4rt4rus het volgende:
Nieuwe posts, gaat het niet over C++ :'(
_O- Excuses.
Yuri_Boykadinsdag 7 oktober 2014 @ 21:08
quote:
0s.gif Op dinsdag 7 oktober 2014 21:00 schreef Gehenna het volgende:

[..]

Ook je settings weggegooid (als je veel hebt veranderen, is een back-up uiteraard wel handig te houden :P) bij het verwijderen? Dit gebeurt standaard (verplaatsen naar de prullenmand) niet op een mac. Een tooltje als Appzapper kan daar bij helpen :)
Het werkt nog steeds niet. :'( Als het nou iets kleins was; soit, maar het is toch een erg handige feature.
Yuri_Boykadinsdag 7 oktober 2014 @ 21:09
Sublime blijft ook als actief aangegeven staan in de dock, terwijl ik hem afgesloten heb (rood kruisje).
Gehennadinsdag 7 oktober 2014 @ 21:22
quote:
0s.gif Op dinsdag 7 oktober 2014 21:09 schreef Yuri_Boyka het volgende:
Sublime blijft ook als actief aangegeven staan in de dock, terwijl ik hem afgesloten heb (rood kruisje).
AAAAH! nieuw op een mac dus :P

ja je moet ook cmd+Q gebruiken :D (Of in het menu: Stop Sublime), met het kruisje sluit je het window, en dus je documenten (ja nogal counter-intuitief als je windows bent gewend.. maar goed)
Yuri_Boykadinsdag 7 oktober 2014 @ 21:24
quote:
10s.gif Op dinsdag 7 oktober 2014 21:22 schreef Gehenna het volgende:

[..]

AAAAH! nieuw op een mac dus :P

ja je moet ook cmd+Q gebruiken :D (Of in het menu: Stop Sublime), met het kruisje sluit je het window, en dus je documenten (ja nogal counter-intuitief als je windows bent gewend.. maar goed)
Hahaha, ja, vandaag binnengekregen!

MAAR HET WERKT MAN! *O* Wel een beetje irritant dan dat het met het kruisje niet werkt.
Gehennadinsdag 7 oktober 2014 @ 22:10
quote:
10s.gif Op dinsdag 7 oktober 2014 21:24 schreef Yuri_Boyka het volgende:

[..]

Hahaha, ja, vandaag binnengekregen!

MAAR HET WERKT MAN! *O* Wel een beetje irritant dan dat het met het kruisje niet werkt.
Went heel snel, die key-combi's ga je van houden :Y
t4rt4rusdinsdag 7 oktober 2014 @ 23:15
nano O+
FastFox91donderdag 6 november 2014 @ 18:50
Ik probeer een 8bit binary file weg te schrijven, maar de grootte van het bestand is 8 bytes, waarschijnlijk omdat die de bits als karakters ziet.
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <fstream>
using namespace std;
int main() {
    ofstream file;
    file.open("test.bin", ios::out | ios::binary);
    file.write("10101010", 8);
    file.close();
    return 1;
}
Volgens mij zou de grootte 1byte moeten zijn. Kan iemand mij dit uitleggen?
t4rt4rusdonderdag 6 november 2014 @ 19:01
quote:
5s.gif Op donderdag 6 november 2014 18:50 schreef FastFox91 het volgende:
Ik probeer een 8bit binary file weg te schrijven, maar de grootte van het bestand is 8 bytes, waarschijnlijk omdat die de bits als karakters ziet.
[ code verwijderd ]

Volgens mij zou de grootte 1byte moeten zijn. Kan iemand mij dit uitleggen?
Ben je aan het trollen?
FastFox91donderdag 6 november 2014 @ 19:02
quote:
0s.gif Op donderdag 6 november 2014 19:01 schreef t4rt4rus het volgende:

[..]

Ben je aan het trollen?
:D Nee, eigenlijk niet. Ik heb het probleem zo klein mogelijk gemaakt. Natuurlijk ga ik geen moeite doen om 7 bits te besparen. Of 'kost' het 7 bits om 1 te bewaren?
t4rt4rusdonderdag 6 november 2014 @ 19:11
quote:
0s.gif Op donderdag 6 november 2014 19:02 schreef FastFox91 het volgende:

[..]

:D Nee, eigenlijk niet.
ios::binary doet niet wat jij denkt dat het doet.
http://en.cppreference.com/w/cpp/io/c#Binary_and_text_modes

Dus als je "10101010" write, schrijf je"1", "0", "1", "0" , "1", "0", "1", "0" weg, dat zijn 8 bytes.

Verder:
- Moet je 0 returnen als er geen error is, dus geen 1. Je kan in C++ return 0; ook weg laten in main.
- Hebben we RAII.
File openen kan je in de constructor doen. En je hoeft hem niet te closen want dat gebeurd al als je object out of scope gaat.
- En using namespace std; is eigenlijk niet zo handig om te gebruiken.
FastFox91donderdag 6 november 2014 @ 19:36
quote:
0s.gif Op donderdag 6 november 2014 19:11 schreef t4rt4rus het volgende:

[..]

ios::binary doet niet wat jij denkt dat het doet.
http://en.cppreference.com/w/cpp/io/c#Binary_and_text_modes

Dus als je "10101010" write, schrijf je"1", "0", "1", "0" , "1", "0", "1", "0" weg, dat zijn 8 bytes.

Verder:
- Moet je 0 returnen als er geen error is, dus geen 1. Je kan in C++ return 0; ook weg laten in main.
- Hebben we RAII.
File openen kan je in de constructor doen. En je hoeft hem niet te closen want dat gebeurd al als je object out of scope gaat.
- En using namespace std; is eigenlijk niet zo handig om te gebruiken.
"A binary stream is an ordered sequence of characters that can transparently record internal data."
Dat is jammer, ik dacht even makkelijk bits weg te kunnen schrijven.
Nu kan ik "10101010" ook schrijven in decimaal, dus "170" en dat kost slechts 3 karakters ipv 8 (of heximal 2). Weet jij een manier om het toch terug te brengen naar 1 byte?

Bedankt voor de overige tips. Ik sta er eigenlijk niet bij stil of het correct/goed/handig is wat ik doe.

Wat ik nu ga proberen is om binary om te zetten naar ascii en dan op te slaan, maar eigenlijk wil ik gewoon bits kunnen wegschrijven.

[ Bericht 2% gewijzigd door FastFox91 op 06-11-2014 19:44:34 ]
t4rt4rusdonderdag 6 november 2014 @ 20:17
quote:
0s.gif Op donderdag 6 november 2014 19:36 schreef FastFox91 het volgende:

[..]

"A binary stream is an ordered sequence of characters that can transparently record internal data."
Dat is jammer, ik dacht even makkelijk bits weg te kunnen schrijven.
Nu kan ik "10101010" ook schrijven in decimaal, dus "170" en dat kost slechts 3 karakters ipv 8 (of heximal 2). Weet jij een manier om het toch terug te brengen naar 1 byte?

Bedankt voor de overige tips. Ik sta er eigenlijk niet bij stil of het correct/goed/handig is wat ik doe.

Wat ik nu ga proberen is om binary om te zetten naar ascii en dan op te slaan, maar eigenlijk wil ik gewoon bits kunnen wegschrijven.
Dan schrijf je 170 weg... Het getal niet "170"
FastFox91donderdag 6 november 2014 @ 20:28
quote:
0s.gif Op donderdag 6 november 2014 20:17 schreef t4rt4rus het volgende:

[..]

Dan schrijf je 170 weg... Het getal niet "170"
Bij het inlezen van test.bin kan ik rekening houden dat het decimaal is opgeslagen. 170 kan ik weer omzetten naar binair.
t4rt4rusdonderdag 6 november 2014 @ 20:28
quote:
0s.gif Op donderdag 6 november 2014 20:28 schreef FastFox91 het volgende:

[..]

Bij het inlezen van test.bin kan ik rekening houden dat het decimaal is opgeslagen. 170 kan ik weer omzetten naar binair.
Het wordt niet decimaal opgeslagen het wordt binair opgeslagen.
FastFox91donderdag 6 november 2014 @ 20:36
quote:
0s.gif Op donderdag 6 november 2014 20:28 schreef t4rt4rus het volgende:

[..]

Het wordt niet decimaal opgeslagen het wordt binair opgeslagen.
1
2
3
4
5
std::ofstream file("test.txt");
file.write("170", 3); // 3 karakters en 3 bytes

std::ofstream file2("test.bin", std::ios::binary);
file2.write("10101010", 8); // 8 bits, maar wordt opgeslagen als 8 karakters en 8 bytes. 
test.txt is dan toch niet binair opgeslagen?
t4rt4rusdonderdag 6 november 2014 @ 23:05
quote:
0s.gif Op donderdag 6 november 2014 20:36 schreef FastFox91 het volgende:

[..]
[ code verwijderd ]

test.txt is dan toch niet binair opgeslagen?
Je moet je even inlezen in basis C++.
Een string is een byte array.

"10101010" is dan ook gewoon een array met 8 karakters(en null teriminated).
Dat is 8 byte en niet 8 bit.

"170" is een string met 3 karakters '1', '7' en '0'.
FastFox91vrijdag 7 november 2014 @ 08:40
quote:
0s.gif Op donderdag 6 november 2014 23:05 schreef t4rt4rus het volgende:

[..]

Je moet je even inlezen in basis C++.
Een string is een byte array.

"10101010" is dan ook gewoon een array met 8 karakters(en null teriminated).
Dat is 8 byte en niet 8 bit.

Het is uiteindelijk gelukt om een 8bit binary string om te zetten naar een char en die weg te schrijven naar een bestand zodat die 1 byte blijft. Bedankt voor je reacties t4rt4rus.
"170" is een string met 3 karakters '1', '7' en '0'.
Wat je zegt, weet ik.
Ik vulde alleen "10101010" in omdat de write function als eerste parameter een string verwacht. Mijn vraag is of het mogelijk is om 8 bits op te slaan in een bestand ter grootte van 1 byte?

[ Bericht 9% gewijzigd door FastFox91 op 07-11-2014 08:58:51 ]
thabitvrijdag 7 november 2014 @ 09:00
Mijn God, je kan toch wel een binaire string naar een byte omzetten en vice versa?
Tijnvrijdag 7 november 2014 @ 09:14
quote:
0s.gif Op vrijdag 7 november 2014 08:40 schreef FastFox91 het volgende:

[..]

Wat je zegt, weet ik.
Ik vulde alleen "10101010" in omdat de write function als eerste parameter een string verwacht.
Als je 1 byte wilt wegschrijven is het niet handig als je er 8 bytes instopt.
trancethrustvrijdag 7 november 2014 @ 09:33
quote:
0s.gif Op vrijdag 7 november 2014 08:40 schreef FastFox91 het volgende:

[..]

Wat je zegt, weet ik.
Ik vulde alleen "10101010" in omdat de write function als eerste parameter een string verwacht. Mijn vraag is of het mogelijk is om 8 bits op te slaan in een bestand ter grootte van 1 byte?
Welke 8 bits wil je opslaan?
FastFox91vrijdag 7 november 2014 @ 09:40
quote:
0s.gif Op vrijdag 7 november 2014 09:00 schreef thabit het volgende:
Mijn God, je kan toch wel een binaire string naar een byte omzetten en vice versa?
Net niet, nu wel. Het is gelukt.
quote:
2s.gif Op vrijdag 7 november 2014 09:14 schreef Tijn het volgende:

[..]

Als je 1 byte wilt wegschrijven is het niet handig als je er 8 bytes instopt.
Ik had aangenomen dat in de functie write de karakters als binary werden geïnterpreteerd.
quote:
5s.gif Op vrijdag 7 november 2014 09:33 schreef trancethrust het volgende:

[..]

Welke 8 bits wil je opslaan?
1, 0, 1, 0, 1, 0, 1 en 0.

Maar het is gelukt. Bedankt voor de reacties.
Gehennavrijdag 7 november 2014 @ 09:40
Wellicht kan het nog mooier of compacter, maar hiermee kun je een binary string omzetten naar een getal

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char * ptr;
    long parsed = strtol("11110111", & ptr, 2);
    printf("%lX\n", parsed);
    return EXIT_SUCCESS;
}
FastFox91vrijdag 7 november 2014 @ 09:48
quote:
0s.gif Op vrijdag 7 november 2014 09:40 schreef Gehenna het volgende:
Wellicht kan het nog mooier of compacter, maar hiermee kun je een binary string omzetten naar een getal
[ code verwijderd ]

1
2
3
bool x[] = {0, 1, 1, 1, 0, 0, 1, 0};
int y = x[0] << 7 | x[1] << 6 | x[2] << 5 | x[3] << 4 | x[4] << 3 | x[5] << 2 | x[6] << 1 | x[7];
char z = (char) y;
Zo had ik het uiteindelijk gedaan, maar bedankt voor je toevoeging.
trancethrustvrijdag 7 november 2014 @ 09:57
Je kan ook direct zetten:
1char z = 64+32+16+2
FastFox91vrijdag 7 november 2014 @ 10:21
Dan kan ik net zo goed direct char z = 114 doen. :+ Ik heb die int y = .. wel nodig want de binary string verandert steeds.
t4rt4rusvrijdag 7 november 2014 @ 10:48
quote:
0s.gif Op vrijdag 7 november 2014 10:21 schreef FastFox91 het volgende:
Dan kan ik net zo goed direct char z = 114 doen. :+ Ik heb die int y = .. wel nodig want de binary string verandert steeds.
Char is ook een integer, dus je hebt geen int nodig.

Gebruik gewoon een functie die een string omzet naar integer.
trancethrustvrijdag 7 november 2014 @ 10:50
quote:
0s.gif Op vrijdag 7 november 2014 10:21 schreef FastFox91 het volgende:
Dan kan ik net zo goed direct char z = 114 doen. :+ Ik heb die int y = .. wel nodig want de binary string verandert steeds.
Dat eerste bedoel ik (char z = 0b01110010; kan overigens ook), dat laatste bleek niet uit je code. In dat geval kun je line 2 beter in een loop gooien voor leesbaarheid. Je loopt ook in de knoei als x[0]=true omdat je signed ints gebruikt (vanwege one's complement).

Edit: of nou ja, afhankelijk van wat je eigenlijk wilt met die bits...
Toryuvrijdag 7 november 2014 @ 20:52
Dit vind ik mooier:
1
2
bitset<10> somebits(string("01011"));
string somestring = somebits.to_string();
http://www.cplusplus.com/reference/bitset/bitset/
netolkvrijdag 14 november 2014 @ 00:59
Hey Fok!ers.

Ik heb wat problemen met vectoren die pointers hebben...

1
2
3
4
5
6
7
8
9
std::vector<foo*> test;

test.push_back(new foo);

for(int i = 0; i < test.size(); i++)
   delete test[i];
test.clear();

test.push_back(new foo); // hier crashed het programma

Het idee is dat foo een virual class is en er dus derived classes aan de vector worden toegevoegd.
Het probleem is alleen dat wanneer ik de vector dus geleegd heb (met clear() ) dan crashed het programma als ik er weer wat aan toe probeer te voegen.

Kan iemand mij vertellen waarom dit gebeurt en hoe ik dit kan voorkomen? Internet maakt mij namelijk niet veel wijzer
Holy_Goatvrijdag 14 november 2014 @ 07:08
Uhm mm ik heb hier lang niet zo veel verstand van maar heeft het mss iets te maken dat je aangeeft dat er pointers naar foo inkomen en je er een class foo instopt? Of zie ik dat verkeerd
FastFox91vrijdag 14 november 2014 @ 08:40
@netolk Met een normale / "niet virtual class" werkt het iig prima.

@Holy_Goat new foo geeft een pointer terug.
thabitvrijdag 14 november 2014 @ 09:00
quote:
0s.gif Op vrijdag 14 november 2014 00:59 schreef netolk het volgende:
Hey Fok!ers.

Ik heb wat problemen met vectoren die pointers hebben...
[ code verwijderd ]

Het idee is dat foo een virual class is en er dus derived classes aan de vector worden toegevoegd.
Het probleem is alleen dat wanneer ik de vector dus geleegd heb (met clear() ) dan crashed het programma als ik er weer wat aan toe probeer te voegen.

Kan iemand mij vertellen waarom dit gebeurt en hoe ik dit kan voorkomen? Internet maakt mij namelijk niet veel wijzer
Dit is te summier. Geef eens een compileerbaar programma (dus inclusief main) dat deze fout genereert. Daar kunnen we wat meer mee.
t4rt4rusvrijdag 14 november 2014 @ 09:15
quote:
0s.gif Op vrijdag 14 november 2014 00:59 schreef netolk het volgende:
Hey Fok!ers.

Ik heb wat problemen met vectoren die pointers hebben...
[ code verwijderd ]

Het idee is dat foo een virual class is en er dus derived classes aan de vector worden toegevoegd.
Het probleem is alleen dat wanneer ik de vector dus geleegd heb (met clear() ) dan crashed het programma als ik er weer wat aan toe probeer te voegen.

Kan iemand mij vertellen waarom dit gebeurt en hoe ik dit kan voorkomen? Internet maakt mij namelijk niet veel wijzer
Wat voor error krijg je?
Al een debugger gebruikt? Valgrind?
netolkvrijdag 14 november 2014 @ 10:52
Ik kreeg een crash met de melding program requested OS to quit program in unusual way oid

maar ik heb een poging gedaan om een voorbeeld code te schrijven en daar werkt het gewoon.

Mijn code opnieuw gecompileerd en nu werkt het daar ook. Blijkbaar heeft m'n compiler kuren en recompiled ie niet perse alle files...

Anyway bedankt voor de reacties. Vond het al raar dat het niet zou werken maar het hoort dus ook gewoon te werken :)
netolkzaterdag 25 juli 2015 @ 20:14
Beste Fok!ers,
Ik kom niet helemaal uit ShellExecute, kan iemand mij helpen?

Zo werkt de code wel:
1ShellExecute(NULL, NULL,"bestand.odt",NULL,"map",SW_SHOWNORMAL);    

Maar ik heb hem liever in dit formaat zodat ik niet telkens de map eraf moet parsen en in een andere parameter mee hoef te geven.
1ShellExecute(NULL, NULL,"map/bestand.odt",NULL,NULL,SW_SHOWNORMAL);    
Alleen deze manier werkt dus niet, doe ik iets fout met relatieve path namen? of werkt ShellExecute echt alleen op de eerste manier?
t4rt4ruszondag 26 juli 2015 @ 03:47
quote:
0s.gif Op zaterdag 25 juli 2015 20:14 schreef netolk het volgende:
Beste Fok!ers,
Ik kom niet helemaal uit ShellExecute, kan iemand mij helpen?

Zo werkt de code wel:
[ code verwijderd ]

Maar ik heb hem liever in dit formaat zodat ik niet telkens de map eraf moet parsen en in een andere parameter mee hoef te geven.
[ code verwijderd ]

Alleen deze manier werkt dus niet, doe ik iets fout met relatieve path namen? of werkt ShellExecute echt alleen op de eerste manier?
Heeft niks met C++ te maken maar hier is je antwoord https://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx

Je man dus een relatief pad invoeren.
Moet je working directory natuurlijk wel goed zijn.
netolkzondag 26 juli 2015 @ 11:25
quote:
1s.gif Op zondag 26 juli 2015 03:47 schreef t4rt4rus het volgende:

[..]

Heeft niks met C++ te maken maar hier is je antwoord https://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx

Je man dus een relatief pad invoeren.
Moet je working directory natuurlijk wel goed zijn.
Daar had ik dus naar gekeken. maar dat werkt dus niet. (tenzij m'n working directory niet standaard de locatie van de exe is)
t4rt4ruszondag 26 juli 2015 @ 13:29
quote:
0s.gif Op zondag 26 juli 2015 11:25 schreef netolk het volgende:

[..]

Daar had ik dus naar gekeken. maar dat werkt dus niet. (tenzij m'n working directory niet standaard de locatie van de exe is)
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364934(v=vs.85).aspx

Lijkt mij eigenlijk ook... Hoewel misschien is het wel C:/Users/[username]/
netolkzondag 26 juli 2015 @ 16:23
quote:
1s.gif Op zondag 26 juli 2015 13:29 schreef t4rt4rus het volgende:

[..]

https://msdn.microsoft.com/en-us/library/windows/desktop/aa364934(v=vs.85).aspx

Lijkt mij eigenlijk ook... Hoewel misschien is het wel C:/Users/[username]/
Ja dir is idd gewoon waar m'n exe staat. Ik bedenk me net dat door argv[0] toe te voegen het sowieso opgelost moet zijn omdat het dan geen relative path meer is.

Anyway bedankt voor de reacties en het meedenken

PS. werkt alleen als je het niet via cmd opent dan

[ Bericht 3% gewijzigd door netolk op 26-07-2015 16:36:40 ]
#ANONIEMvrijdag 29 januari 2016 @ 10:06
*kick*

Ik heb een programma en als ik die upload krijg ik een melding over dat er een "warning" bij het compileren was. Op mijn eigen computer krijg ik geen warning. Dus ik kan alleen maar raden waar het aan ligt.

Een van de dingen die ik heb toegevoegd is een null-check ergens. Dat heb ik zo gedaan:

1if ( bla && object.functie() && ( object.functie()->nogwat() == waarde ) ) {

Kan het zijn dat een of andere compiler, met een of andere instelling, die manier van null-check niet leuk vindt? Of zit ik met dat idee op het verkeerde spoor?
thabitvrijdag 29 januari 2016 @ 10:15
quote:
0s.gif Op vrijdag 29 januari 2016 10:06 schreef Igen het volgende:
*kick*

Ik heb een programma en als ik die upload krijg ik een melding over dat er een "warning" bij het compileren was. Op mijn eigen computer krijg ik geen warning. Dus ik kan alleen maar raden waar het aan ligt.

Een van de dingen die ik heb toegevoegd is een null-check ergens. Dat heb ik zo gedaan:
[ code verwijderd ]

Kan het zijn dat een of andere compiler, met een of andere instelling, die manier van null-check niet leuk vindt? Of zit ik met dat idee op het verkeerde spoor?
Met deze summiere informatie kan niemand wat, maar die nullcheck lijkt me niks mis mee. Wat voor warning was het? Probeer eens te compilen met extra strenge warnings (-Wall -Wextra -Wpedantic).
#ANONIEMvrijdag 29 januari 2016 @ 10:17
quote:
0s.gif Op vrijdag 29 januari 2016 10:15 schreef thabit het volgende:

[..]

Met deze summiere informatie kan niemand wat, maar die nullcheck lijkt me niks mis mee. Wat voor warning was het? Probeer eens te compilen met extra strenge warnings (-Wall -Wextra -Wpedantic).
Ik weet niet wat voor warning het is. Het komt uit een systeem voor "continuous integration" en die zegt alleen maar dat er een warning was en dat daarom het resultaat als mislukt wordt beschouwd, maar geeft geen precieze informatie.

Maar ik zal eens kijken of ik lokaal met die opties kan compileren.
thabitvrijdag 29 januari 2016 @ 10:19
Ik bedenk net opeens dat er toch wel wat mis is met die nullcheck. Je haalt je pointer op uit een functie, maar wie garandeert dat die functie elke keer dezelfde waarde returnt?
#ANONIEMvrijdag 29 januari 2016 @ 10:20
quote:
0s.gif Op vrijdag 29 januari 2016 10:19 schreef thabit het volgende:
Ik bedenk net opeens dat er toch wel wat mis is met die nullcheck. Je haalt je pointer op uit een functie, maar wie garandeert dat die functie elke keer dezelfde waarde returnt?
Oh, dat is een simpele property-getter dus dat is geen probleem. :)
thabitvrijdag 29 januari 2016 @ 10:22
quote:
0s.gif Op vrijdag 29 januari 2016 10:20 schreef Igen het volgende:

[..]

Oh, dat is een simpele property-getter dus dat is geen probleem. :)
Kan zijn, maar voor de compiler is het gewoon een functie. Property kan bovendien door een andere thread aangepast worden tussen de twee calls.
#ANONIEMvrijdag 29 januari 2016 @ 10:25
quote:
0s.gif Op vrijdag 29 januari 2016 10:22 schreef thabit het volgende:

[..]

Kan zijn, maar voor de compiler is het gewoon een functie. Property kan bovendien door een andere thread aangepast worden tussen de twee calls.
Ok. Als dat de warning blijkt te zijn dan is het een slimme compiler, vind ik. :D
thabitvrijdag 29 januari 2016 @ 10:28
quote:
0s.gif Op vrijdag 29 januari 2016 10:25 schreef Igen het volgende:

[..]

Ok. Als dat de warning blijkt te zijn dan is het een slimme compiler, vind ik. :D
Of een static code analyzer; die vangen dergelijke zaken vaak wel op. Compilers malen hier doorgaans niet om; die laten je meestal gewoon null pointers dereferencen, want misschien is het wel de bedoeling dat je een segfault krijgt. :P.
#ANONIEMvrijdag 29 januari 2016 @ 19:01
quote:
0s.gif Op vrijdag 29 januari 2016 10:28 schreef thabit het volgende:

[..]

Of een static code analyzer; die vangen dergelijke zaken vaak wel op. Compilers malen hier doorgaans niet om; die laten je meestal gewoon null pointers dereferencen, want misschien is het wel de bedoeling dat je een segfault krijgt. :P.
En toen bleek dat er helemaal geen fout in mijn code zat. Iemand anders had net iets gecommit met een foutje erin. Nou ja, kan gebeuren.