abonnement Unibet Coolblue Bitvavo
pi_109020336

Nu mét gratis web-support!

Als je vragen hebt over C of C++, dan zit je hier goed met een (hopelijk later grote) kliek guru's.
Beperk je vragen niet tot "hij doet het niet" of "hij geeft een fout" - onze glazen bol is kapot en we willen graag van je weten wát er niet lukt en wélke foutmelding je precies krijgt. ;)

En onthoud: lieve modjes maken dit topic centraal! O+

Vorige delen:
[C(++)] voor dummies - Deel 1
[C(++)] voor dummies - Deel 2
[C(++)] voor dummies - Deel 3
[C(++)] voor dummies - Deel 4

:? FAQ :?

:? Ik wil beginnen met C/C++, wat voor IDE is het beste voor mij?
Dat ligt eraan. Als je alléén voor MS Windows wilt gaan developen, is Visual Studio de beste optie. Deze kun je bovendien als je student bent via Microsoft DreamSpark of MSDN Academic Alliance gratis downloaden. :)
Wil je echter cross-platform (dat wil zeggen: voor b.v. Windows én Linux, of Linux én Mac) gaan developen, dan zijn Dev-C++ en Code::Blocks de beste optie voor C++. Eclipse (ook voor C) en NetBeans zijn ook goede keuzes, alleen zijn deze meer op Java gericht. Een ander IDE, van Nokia's hand, is Qt Creator. Dit IDE maakt gebruik van het Qt-framework, een set van functies, types, variabelen etc. om programmeren makkelijker te maken. Dit framework is cross-platform. :)

:? Hoe gebruik ik x/wat houdt y in?
Stop! Voor vragen hoe je bepaalde ingebouwde functies, types of classes gebruikt kun je de C referentie of de C++ referentie gebruiken. Hier staat alles in wat je nodig hebt. :)

:? Wat is het verschil tussen C en C++?
C++ is, eenvoudig gezegd, een nieuwere versie van C (vandaar ook de naam, C++ wil zeggen: verhoog de waarde van C met 1). Het biedt onder andere betere klasse-ondersteuning en verschillende nieuwe types, zoals vectors en maps, om er maar een paar te noemen.
Als je wilt beginnen met leren, is C++ beter, want C wordt eigenlijk niet vaak meer gebruikt.

:? Wat is het Windows SDK?
Het Windows SDK is een set van functies, gemaakt door Microsoft, om het programmeren voor Windows te vereenvoudigen.
Als je ervoor kiest het Windows SDK te gebruiken, houd er dan rekening mee dat je applicatie Windows-only wordt!
Je kunt de laatste versie hier vinden ter download. :)

Handige links:

Referenties en tutorials:
Leer C en/of C++ (engels)
Leer programmeren met het Windows SDK (engels)
Info over het Windows SDK (engels)

Deze OP vind je hier.

[ Bericht 1% gewijzigd door FastFox91 op 12-03-2012 19:12:02 ]
pi_109020352
Laatste berichten van het vorige topic:
quote:
0s.gif Op maandag 12 maart 2012 18:24 schreef Computerfluisteraar het volgende:

[..]

Is dit de beste IDE of zijn er nog meer die geschikt zijn?
quote:
0s.gif Op maandag 12 maart 2012 18:56 schreef FastFox91 het volgende:

[..]

Qt is niet alleen een IDE, maar ook een UI cross-platform framework. http://qt.nokia.com/products/


[ Bericht 7% gewijzigd door FastFox91 op 12-03-2012 19:20:22 ]
pi_109020491
quote:
0s.gif Op maandag 12 maart 2012 18:22 schreef thabit het volgende:

[..]

Die parameters worden direct aan main() gevoerd. Ik zie niet waarom je allerlei vage libraries daarvoor nodig zou hebben.
1
2
3
4
5
6
7
8
9
10
while( ( opt = getopt( argc, argv, "f:s" ) ) != -1 ) {
    switch( opt ) { 
        case f':  // input file
            // iets
            break;
        case 's':
            // iets
            break;
     }
}
Wat moet ik dan aanpassen zodat ik niet meer -s moet doen maar -scan? In dat 'case' stukje is het gewoon s -> scan, maar hoe pas ik het aan in de getopt functie?

Of bedoel je dat ik sowieso geen getopt moet gebruiken?
pi_109050850
quote:
0s.gif Op maandag 12 maart 2012 19:01 schreef FastFox91 het volgende:

[..]
[ code verwijderd ]

Wat moet ik dan aanpassen zodat ik niet meer -s moet doen maar -scan? In dat 'case' stukje is het gewoon s -> scan, maar hoe pas ik het aan in de getopt functie?
Als je 's' naar "scan" verandert, krijg je hier een compileerfout omdat opt (in de switch) een character is. Ik denk dat je het beste getopt_long (de eerste google-hit...) kunt gebruiken.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_109050977
quote:
0s.gif Op dinsdag 13 maart 2012 15:47 schreef GS42 het volgende:

[..]

Als je 's' naar "scan" verandert, krijg je hier een compileerfout omdat opt (in de switch) een character is. Ik denk dat je het beste getopt_long (de eerste google-hit...) kunt gebruiken.
Dat snap ik, en die getopt_long had ik ook gevonden, maar thabit zegt dat het niet nodig is om andere libraries te gebruiken.
pi_109051016
quote:
0s.gif Op maandag 12 maart 2012 19:01 schreef FastFox91 het volgende:

[..]
[ code verwijderd ]

Wat moet ik dan aanpassen zodat ik niet meer -s moet doen maar -scan? In dat 'case' stukje is het gewoon s -> scan, maar hoe pas ik het aan in de getopt functie?

Of bedoel je dat ik sowieso geen getopt moet gebruiken?
Iets als getopt heb je niet echt nodig. Het lijkt er vooral op dat dat gemaakt is om een soort standaard voor command line opties te definiëren. Maar je kan net zo makkelijk, zo niet makkelijker, met de hand de opties parsen.
pi_109051063
quote:
0s.gif Op vrijdag 9 maart 2012 10:05 schreef netolk het volgende:
Klopt het dat std::thread nog niet werkt voor g++ onder windows?
Oh, daar had ik nog helemaal niet aan gedacht. Nee, MinGW zal de threads nog wel niet ondersteunen omdat dit een hele nieuwe aanpak van de compiler vereist. MinGW heeft altijd geprobeerd standaard C(++) te ondersteunen, maar heeft altijd gezegd POSIX-dingen (zoals file system en threads) te laten voor wat het is en dus niet te ondersteunen.

Nu C++ zelf threads ondersteunt, moeten ze hier wel iets mee. Ik denk dat het nog wel even kan duren voordat MinGW iets met threads doet.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_109051192
quote:
0s.gif Op dinsdag 13 maart 2012 15:51 schreef FastFox91 het volgende:

[..]

Dat snap ik, en die getopt_long had ik ook gevonden, maar thabit zegt dat het niet nodig is om andere libraries te gebruiken.
Het is niet nodig, nee. Zoals je waarschijnlijk weet, kan je de command-line argumenten lezen via de eerste en tweede parameter van de main(). Maar dat betekent dat je ze wel zelf moet parsen. Dit is niet heel veel werk, maar ook werk dat je prima uit handen kunt geven. Gewoon doen wat je zelf het gemakkelijkste vindt werken, zou ik zeggen.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_109052132
quote:
5s.gif Op vrijdag 9 maart 2012 08:21 schreef Computerfluisteraar het volgende:
Een vraagje aan de mensen met verstand van C++:

Ik wil leren ontwikkelen in C++. Hoe zijn jullie begonnen? En kan ik C++ applicaties werkende krijgen op Linux én Windows?
Ik ben begonnen met een flinke cursus van een half jaar lang, zeker 8 uur per week. Daarvoor had ik met andere programmeer- en scripttalen gewerkt. C++ is aan de ene kant een goede taal om mee te beginnen omdat het een redelijk consistente en bekende taal is, maar aan de andere kant ook een lastige, vooral omdat het zo groot is.

Als je het echt wilt leren, raad ik aan om een paar goede boeken uit de winkel of de bieb te halen en geen tijd verspillen met online lesprogramma's of dergelijke. Vrijwel alle online C++-cursussen die ik heb gezien, bevatten flinke fouten. Zie bijvoorbeeld Stroustrups suggesties. Zijn eigen boek, Principles and Practice Using C++, is ook aan te raden.

Bovendien raad ik aan om geen IDE te gebruiken terwijl je C++ leert. Deze verstopt namelijk veel van wat er nu eigenlijk gebeurt, waardoor je leert werken met een programma en niet met C++. Als je wilt, kan je later natuurlijk overstappen. (Let op, ik ben wel lichtelijk bevooroordeeld omdat ik een hekel heb aan IDE's.)

En als laatste: Ja, je kunt programma's werkend krijgen voor Windows en Linux. Simpele programma's die alleen standaard C++ gebruiken, zullen sowieso op elk besturingsysteem werken. Als je ingewikkelder dingen wilt, zoals werken met een GUI of het filesystem, dan wordt het wat lastiger en ben je meestal afhankelijk van externe libraries, zoals Qt of Boost. Hiermee kan je prima werken, maar alles naar je zin maken is soms lastig. Vergelijk het met (ingewikkelde) HTML schrijven die er in elke browser hetzelfde uitziet: het kan wel maar is soms een hoop geknoei.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_109053134
quote:
0s.gif Op vrijdag 9 maart 2012 08:13 schreef netolk het volgende:

[..]

maar dit stukje code blijft wel een error geven:
[ code verwijderd ]

dan geeft ie dus de volgende error:
[ code verwijderd ]

De code die je post, geeft bij mij andere compileerfouten. Zou je een minimaal voorbeeld kunnen geven - met een main() - die jouw compileerfout geeft?

De foutmelding impliceert dat je een verkeerde toekenning doet, zoals
1int() = 23;
Hierbij ken je een waarde toe aan een anonieme variabele (wat natuurlijk niet kan).
"Slechts diegene mag slopen die iets beters kan bouwen."
  dinsdag 13 maart 2012 @ 20:36:27 #11
189216 netolk
maar dan andersom
pi_109063362
quote:
0s.gif Op dinsdag 13 maart 2012 16:43 schreef GS42 het volgende:

[..]

De code die je post, geeft bij mij andere compileerfouten. Zou je een minimaal voorbeeld kunnen geven - met een main() - die jouw compileerfout geeft?

De foutmelding impliceert dat je een verkeerde toekenning doet, zoals
[ code verwijderd ]

Hierbij ken je een waarde toe aan een anonieme variabele (wat natuurlijk niet kan).
Dat bleek het idd te zijn, na veel zoeken (en in back-ups kijken) bleek dat er inderdaad ergens een & was verdwenen...

Das dan wel het kutte aan die nieuwe compiler:
1
2
error: new declaration 'long unsigned int Threader_Key(void*)' 
error: ambiguates old declaration 'long unsigned int Threader_Key(void*)'
Kan nu dus geen Threads meer maken omdat de "ambiguates old declaration" niet meer ondersteund word maar de std::Thread ook nog steeds niet...
Beware of the Raping Zebra's
  woensdag 14 maart 2012 @ 14:50:49 #12
314941 Ai_KaRaMBa
Eat my shorts!
pi_109089674
Ik ben het wel met de compiler eens: ik vind 'long unsigned int' ook een raar datatype. Waarom kies je niet voor int of long (al dan niet unsigned)?

Volgens mij is "long int" echt al heul lang depricated?

(edit: los daarvan heb ik geen idee of dat ook daadwerkelijk jouw compileer probleem is)

edit2: Volgens http://en.wikipedia.org/wiki/C_data_types is het "unsigned long int" en niet "long unsigned int"
pi_109092122
quote:
15s.gif Op woensdag 14 maart 2012 14:50 schreef Ai_KaRaMBa het volgende:
Ik ben het wel met de compiler eens: ik vind 'long unsigned int' ook een raar datatype. Waarom kies je niet voor int of long (al dan niet unsigned)?

Volgens mij is "long int" echt al heul lang depricated?

(edit: los daarvan heb ik geen idee of dat ook daadwerkelijk jouw compileer probleem is)

edit2: Volgens http://en.wikipedia.org/wiki/C_data_types is het "unsigned long int" en niet "long unsigned int"
'long' is een verkorte vorm van 'long int', net zoals 'short' een korte naam is voor 'short int'. Ze zijn dus hetzelfde. Ook de volgorde van de signed/unsigned of eventuele cv-qualifiers heeft veel vrijheid. Zo mag het volgende:

1long int signed volatile long const x = 0;

(Wie weet (a) welk fundamenteel datatype dit is en (b) waarom deze declaratie qua betekenis raar is?)

Dus een 'long unsigned int' is precies hetzelfde als een 'unsigned long'.
"Slechts diegene mag slopen die iets beters kan bouwen."
  woensdag 14 maart 2012 @ 17:04:17 #14
189216 netolk
maar dan andersom
pi_109094680
quote:
0s.gif Op woensdag 14 maart 2012 16:03 schreef GS42 het volgende:

[..]

'long' is een verkorte vorm van 'long int', net zoals 'short' een korte naam is voor 'short int'. Ze zijn dus hetzelfde. Ook de volgorde van de signed/unsigned of eventuele cv-qualifiers heeft veel vrijheid. Zo mag het volgende:
[ code verwijderd ]

(Wie weet (a) welk fundamenteel datatype dit is en (b) waarom deze declaratie qua betekenis raar is?)

Dus een 'long unsigned int' is precies hetzelfde als een 'unsigned long'.
a) Ik weet niet precies wat volatile doet, maar ik zou zeggen dat je een constante integer hebt die zowel positief als negatief kan zijn (signed) en de grootte van long long heeft (en als waarde 0)
b) Ik weet niet precies wat volatile doet, dus geen idee
Beware of the Raping Zebra's
pi_109095254
Bedankt voor de reacties GS42 en thabit.
pi_109095763
quote:
0s.gif Op woensdag 14 maart 2012 17:04 schreef netolk het volgende:

[..]

a) Ik weet niet precies wat volatile doet, maar ik zou zeggen dat je een constante integer hebt die zowel positief als negatief kan zijn (signed) en de grootte van long long heeft (en als waarde 0)
b) Ik weet niet precies wat volatile doet, dus geen idee
Volatile wil zeggen dat de waarde van de variabele door een extern proces veranderd kan worden en dat de compiler bij het optimaliseren daar dus rekening mee moet houden.
  woensdag 14 maart 2012 @ 23:01:48 #17
189216 netolk
maar dan andersom
pi_109113315
quote:
0s.gif Op woensdag 14 maart 2012 17:34 schreef thabit het volgende:

[..]

Volatile wil zeggen dat de waarde van de variabele door een extern proces veranderd kan worden en dat de compiler bij het optimaliseren daar dus rekening mee moet houden.
ahh, dan is het rare dat het veranderd kan worden terwijl het een const is
Beware of the Raping Zebra's
pi_109114547
quote:
0s.gif Op woensdag 14 maart 2012 17:04 schreef netolk het volgende:

a) Ik weet niet precies wat volatile doet, maar ik zou zeggen dat je een constante integer hebt die zowel positief als negatief kan zijn (signed) en de grootte van long long heeft (en als waarde 0)
Het datatype is inderdaad 'long long int', wat jij volgens mij ook zegt hierboven. De 'int' is overbodig en mag dus weggelaten worden. Dit geldt ook voor de 'signed': dit is immers standaard zo.

quote:
0s.gif Op woensdag 14 maart 2012 23:01 schreef netolk het volgende:

ahh, dan is het rare dat het veranderd kan worden terwijl het een const is
:Y En dat klopt ook: een variabele zowel const als volatile declareren is vreemd omdat de termen elkaar tegenspreken. Toch kan het zo zijn dat je aan wilt geven dat jouw programma de waarde niet mag veranderen terwijl een extern proces de waarde wel kan veranderen; daarom keurt de compiler het wel goed.
"Slechts diegene mag slopen die iets beters kan bouwen."
  donderdag 15 maart 2012 @ 17:19:32 #19
189216 netolk
maar dan andersom
pi_109135805
quote:
0s.gif Op woensdag 14 maart 2012 23:24 schreef GS42 het volgende:

[..]

Het datatype is inderdaad 'long long int', wat jij volgens mij ook zegt hierboven. De 'int' is overbodig en mag dus weggelaten worden. Dit geldt ook voor de 'signed': dit is immers standaard zo.

[..]

:Y En dat klopt ook: een variabele zowel const als volatile declareren is vreemd omdat de termen elkaar tegenspreken. Toch kan het zo zijn dat je aan wilt geven dat jouw programma de waarde niet mag veranderen terwijl een extern proces de waarde wel kan veranderen; daarom keurt de compiler het wel goed.
*O* *G* *O*
Beware of the Raping Zebra's
pi_109136307
quote:
0s.gif Op woensdag 14 maart 2012 23:24 schreef GS42 het volgende:

[..]

Het datatype is inderdaad 'long long int', wat jij volgens mij ook zegt hierboven. De 'int' is overbodig en mag dus weggelaten worden. Dit geldt ook voor de 'signed': dit is immers standaard zo.
Is het niet sowieso veel handiger om types als int64_t te gebruiken als je expliciet het aantal bits wilt benoemen?
  donderdag 15 maart 2012 @ 17:39:30 #21
189216 netolk
maar dan andersom
pi_109136472
quote:
0s.gif Op donderdag 15 maart 2012 17:34 schreef thabit het volgende:

[..]

Is het niet sowieso veel handiger om types als int64_t te gebruiken als je expliciet het aantal bits wilt benoemen?
Ja, misschien wel....
maar dat doet me aan typedefs denken die door Windows bedacht zijn en dat idee staat me gewoon tegen
Beware of the Raping Zebra's
  donderdag 15 maart 2012 @ 19:52:10 #22
254493 Trollface.
gr rob fruithof, groningencity
pi_109141122
quote:
0s.gif Op donderdag 15 maart 2012 17:34 schreef thabit het volgende:

[..]

Is het niet sowieso veel handiger om types als int64_t te gebruiken als je expliciet het aantal bits wilt benoemen?
Dit dus, in dit geval komt stdint.h/cstdint erg goed van pas.

De OP is iets bijgewerkt, tevens.
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_109165251
quote:
0s.gif Op donderdag 15 maart 2012 17:34 schreef thabit het volgende:

[..]

Is het niet sowieso veel handiger om types als int64_t te gebruiken als je expliciet het aantal bits wilt benoemen?
Ja, als je precies dat aantal bits nodig hebt, is het handiger om die typedefs te gebruiken. Volgens mij zitten deze types echter niet in de standaard en kunnen ze dus problemen opleveren voor andere compilers.

Daarnaast zijn die typedefs ook alleen handig wanneer je een precies aantal bits nodig hebt. Voor de meeste toepassingen is dat echter niet nodig en kan je beter de standaard types gebruiken - omdat deze standaard zijn en mogelijk beter geoptimaliseerd kunnen worden.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_109168461
quote:
14s.gif Op donderdag 15 maart 2012 19:52 schreef Trollface. het volgende:
De OP is iets bijgewerkt, tevens.
De "vorige delen" alinea mag er ook uit nu het een reeks is.
pi_110383144
Vraagje... heb zelf niet C / C++ op m'n computer atm dus weet niet hoe het compileert...

Maaar hoe gaat C en C++ (eventueel C++11) om met
- a[-1] met negatieve constante index dus? (retouneert het een error bij het compileren? ofzo)
- a[i] met i een negatieve integer?
pi_110385500
quote:
7s.gif Op maandag 16 april 2012 02:24 schreef Dale. het volgende:
Vraagje... heb zelf niet C / C++ op m'n computer atm dus weet niet hoe het compileert...

Maaar hoe gaat C en C++ (eventueel C++11) om met
- a[-1] met negatieve constante index dus? (retouneert het een error bij het compileren? ofzo)
- a[i] met i een negatieve integer?
Dat kan gewoon. a[i] is in principe syntactic sugar voor *(a + i).
  maandag 16 april 2012 @ 12:00:28 #27
314941 Ai_KaRaMBa
Eat my shorts!
pi_110389889
Negatieve array index is inderdaad geen probleem (en hoewel wat tricky, soms zelfs handig!)

Sterker nog, doordat het (zoals thabit al zij) gewoon syntactic suger voor rekenen met pointers is, is zelfs -1[a] geldige C syntax :)
  maandag 16 april 2012 @ 12:33:51 #28
189216 netolk
maar dan andersom
pi_110390944
quote:
7s.gif Op maandag 16 april 2012 02:24 schreef Dale. het volgende:
Vraagje... heb zelf niet C / C++ op m'n computer atm dus weet niet hoe het compileert...

Maaar hoe gaat C en C++ (eventueel C++11) om met
- a[-1] met negatieve constante index dus? (retouneert het een error bij het compileren? ofzo)
- a[i] met i een negatieve integer?
bij mij is a[-1] het zelfde als het laatste element van a
Beware of the Raping Zebra's
  maandag 16 april 2012 @ 12:55:11 #29
314941 Ai_KaRaMBa
Eat my shorts!
pi_110391583
Uhm, nee? lijkt me dat a[-1] het element voor a[0] terug geeft?

Mogelijk als a niet een array van een primitief type is en het datatype de [] heeft geimplementeerd, dan zou het misschien wel kunnen dat a[-1] iets anders doet, maar in "normaal" C geeft a[-1] niet het laatste element!
  maandag 16 april 2012 @ 13:02:17 #30
189216 netolk
maar dan andersom
pi_110391821
quote:
15s.gif Op maandag 16 april 2012 12:55 schreef Ai_KaRaMBa het volgende:
Uhm, nee? lijkt me dat a[-1] het element voor a[0] terug geeft?

Mogelijk als a niet een array van een primitief type is en het datatype de [] heeft geimplementeerd, dan zou het misschien wel kunnen dat a[-1] iets anders doet, maar in "normaal" C geeft a[-1] niet het laatste element!
nope bij bij doet (of deed in mn oude compiler) int a[10], dan is a[-1] = a[9]

EDIT: idd even met mn "nieuwe" compiler gecheckt en nu is: a[-1] != a[9] evenals a[10] != a[0] wat bij mijn oude compiler dus ook het geval was

[ Bericht 9% gewijzigd door netolk op 16-04-2012 13:08:41 ]
Beware of the Raping Zebra's
  maandag 16 april 2012 @ 13:09:40 #31
314941 Ai_KaRaMBa
Eat my shorts!
pi_110392077
Serieus??? Welke compiler?

En iets als dit dan?

1
2
3
4
int a[10] = {0};
int *b = &a[1];
b[-1] = 0xCAFE;
printf("%X %X", a[0], a[9]);

Edit: uit jouw edit lijkt het alsof de compiler bij bekende array-grootte een extra modulo operatie invoegt? Dat lijkt mij zeer onwenselijk eigenlijk!!
  maandag 16 april 2012 @ 13:14:43 #32
189216 netolk
maar dan andersom
pi_110392310
MinGW versie 3.x volgens mij maar die versie weet ik niet zeker nu heb ik 5.x en die doet dat idd niet
Beware of the Raping Zebra's
pi_110398543
Een goede C++ compiler zou niet mogen doen wat netolk beschrijft. De standaard beschrijft precies wat er gebeurt bij array-indexering:
quote:
8.3.4.6:
Except where it has been declared for a class (13.5.5), the subscript operator [] is interpreted in such a way that E1[E2] is identical to *((E1)+(E2)).
Dus, zoals al is gezegd, is a[i] gelijk aan *(a + i) en hier mag de compiler niets aan veranderen. Met een negatieve i zou dit vrijwel altijd betekenen dat je uit je array loopt, wat resulteert in ongedefinieerd gedrag en dus gevaarlijk is. Als je echter midden in een array zit, kan een negatieve index geldig zijn.

Zoals ook al gezegd is, geldt dit natuurlijk alleen voor array-types. Als het een klasse betreft met een overloaded operator[](), gaan andere regels op.

Als laatste opmerking, sommige implementaties slaan de grootte van een dynamisch gealloceerde array op in positie array[-1]. (De grootte van een dynamisch gealloceerde array moet immers ergens opgeslagen worden, zodat delete[] weet hoeveel waardes verwijderd moeten worden.) Dus het zou kunnen zijn dat:

1
2
3
4
5
int const size = 42;
int *arr = new int[size];
if (arr[-1] == size) {
   // Compiler slaat array-grootte voor array op
}

Nogmaals, dit voorbeeld is dus geen goede C++ code omdat het gedrag per compiler kan (en zal) verschillen. Het programma kan zelfs prima crashen, als het toevallig uit verboden geheugen leest.
"Slechts diegene mag slopen die iets beters kan bouwen."
  donderdag 7 juni 2012 @ 17:21:30 #34
189216 netolk
maar dan andersom
pi_112574211
zou iemand mij kunnen helpen met threads in c++?
ik gebruik de mingw compiler (weet eerlijk gezegd niet welke versie dacht 5.x oid)

Ik heb een thread nodig om toets aanslagen af te kunnen vangen (onder windows) vroeger kon ik met deze code volstaan:
SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
maar nu werkt dit niet meer onder de compiler die ik nu dus gebruik (schijnt oud te zijn oid) ik weet dat threads tegenwoordig door C++ ondersteund worden en ik dus geen specifieke Windows code meer nodig heb, maar is het dan ook mogelijk om toets (en muis) aanslagen te registreren buiten Windows om?

dan heb ik nog een vraag: Zelfs met de optie: -std=c++0x kan ik de volgende code niet compileren omdat thread geen member van std zou zijn:
1
2
3
4
5
6
7
8
#include <thread>

int main(){
    
    std::thread mythread;
    
    return 0;
}
Beware of the Raping Zebra's
  donderdag 7 juni 2012 @ 17:47:58 #35
314941 Ai_KaRaMBa
Eat my shorts!
pi_112575334
Als je een windows applicatie bouwt, ben je sowieso aan de windows API gebonden. Die CreateThread functie zit daar (nog steeds) in, dus ik zou niet weten waarom je oude code het niet meer zou doen? Link je wel goed? Include je windows.h wel?

En die threads functionaliteit zit pas sinds kort in de nieuwste C++ specificatie; mogelijk ondersteund je compiler ze nog niet?

Het hele user interface gebeuren (oa muis en toetsenbord aanslagen) zijn platform specifiek en daarvoor zit je nog steeds aan een GUI toolkit vast. Dat kan gewoon de Win32 API zijn. Als je het platform onafhankelijk wil doen, kun je ook kijken naar Qt, wxWidgets of OpenGL/GLUT.
  donderdag 7 juni 2012 @ 22:05:37 #36
189216 netolk
maar dan andersom
pi_112587270
quote:
0s.gif Op donderdag 7 juni 2012 17:47 schreef Ai_KaRaMBa het volgende:
Als je een windows applicatie bouwt, ben je sowieso aan de windows API gebonden. Die CreateThread functie zit daar (nog steeds) in, dus ik zou niet weten waarom je oude code het niet meer zou doen? Link je wel goed? Include je windows.h wel?

En die threads functionaliteit zit pas sinds kort in de nieuwste C++ specificatie; mogelijk ondersteund je compiler ze nog niet?

Het hele user interface gebeuren (oa muis en toetsenbord aanslagen) zijn platform specifiek en daarvoor zit je nog steeds aan een GUI toolkit vast. Dat kan gewoon de Win32 API zijn. Als je het platform onafhankelijk wil doen, kun je ook kijken naar Qt, wxWidgets of OpenGL/GLUT.
ik krijg de volgend foutmelding als ik de eerder geplaatste code probeer te compileren:
1
2
error: ambiguates old declaration 'long unsigned int Threader_Key(vo
id*)'

ook lijkt het me logisch dat de compiler thread zou moeten ondersteunen aangezien het meegeleverd is.
het probleem is dus dat de vorige versie van de compiler deze code prima compileerde en dat ik nu dus zowel de "oude" (via Win32 API) als de "nieuwe" thread niet kan gebruiken
Beware of the Raping Zebra's
  donderdag 7 juni 2012 @ 22:26:15 #37
314941 Ai_KaRaMBa
Eat my shorts!
pi_112588642
Komt dat niet omdat je je functie Threader_Key binnen je Key klasse anders declareert, dan bij het implementeren van de functie?

(hint: je implementeert het met een WINAPI calling convention, terwijl je 'm daar niet mee declareert)

En voor wat betreft de C++11 threads, gaf google me: http://stackoverflow.com/(...)cy-features-in-mingw

[ Bericht 21% gewijzigd door Ai_KaRaMBa op 07-06-2012 22:57:36 ]
  vrijdag 8 juni 2012 @ 01:07:12 #38
189216 netolk
maar dan andersom
pi_112596786
quote:
0s.gif Op donderdag 7 juni 2012 22:26 schreef Ai_KaRaMBa het volgende:
Komt dat niet omdat je je functie Threader_Key binnen je Key klasse anders declareert, dan bij het implementeren van de functie?

(hint: je implementeert het met een WINAPI calling convention, terwijl je 'm daar niet mee declareert)

En voor wat betreft de C++11 threads, gaf google me: http://stackoverflow.com/(...)cy-features-in-mingw
Ja, dat weet ik idd maar de vorige compiler gaf dus problemen als WINAPI in een class stond en werkte deze code. Heb net voor de zekerheid nog even gecheckt maar krijg deze melding:
1error: 'WINAPI' is neither function nor member function; cannot be declared friend

Update:
Ik heb de fout gevonden. Uiteindelijk was het even puzzelen maar het kwam er op neer dat de compiler WINAPI niet accepteerde omdat er blijkbaar ergens een #include<windows.h> weg gevallen was. Dus eigenlijk een stomme fout 8)7

in ieder geval bedankt voor de hulp en het meedenken

[ Bericht 12% gewijzigd door netolk op 08-06-2012 01:30:10 ]
Beware of the Raping Zebra's
pi_112839298
Ik heb een probleem; ik heb een tentamen van vorig jaar bekeken over programmeren in C#. Nu snap ik eigenlijk alle opdrachten alleen kom ik er uit 1 niet uit:



Ik hoef niet de volledige uitwerking, alleen maar even een opzetje hoe dit aangepakt zou moeten worden. Ik dacht zelf aan een for-loop of een while-loop maar kan er niet achter komen hoe je dan individueel al die karakters omzet naar een getal. Iemand enig idee? Alvast bedankt :P
pi_112841335
C# is een hele andere programmeertaal dan C of C++, dus ik weet niet of veel mensen hier ermee bekend zijn. Ik neem aan dat je het i-de karakter van string s gewoon kunt ophalen met s[i].
  woensdag 13 juni 2012 @ 16:33:12 #41
292596 Faux.
Fan van zichzelf
pi_112842847
Vraagje, ik wil wel weer 's een nieuwe programmeertaal leren, maar is C++ niet een beetje ouderwets? Kan ik dan niet beter een iets recentere taal leren?
Hier schreef tong80 het volgende:
Faux is een FOK!held, zoals dat vroeger Gellarboy en Brechtje waren. Users die je koestert.
  woensdag 13 juni 2012 @ 17:38:58 #42
189216 netolk
maar dan andersom
pi_112846008
quote:
11s.gif Op woensdag 13 juni 2012 16:33 schreef Faux. het volgende:
Vraagje, ik wil wel weer 's een nieuwe programmeertaal leren, maar is C++ niet een beetje ouderwets? Kan ik dan niet beter een iets recentere taal leren?
nee, C++ is niet ouderwets heel veel word nog steeds in C++ geschreven in veel games zijn de belangrijke delen geschreven in C++, ook word C++ vaak voor modellen gebruikt
Beware of the Raping Zebra's
pi_112847861
quote:
11s.gif Op woensdag 13 juni 2012 16:33 schreef Faux. het volgende:
Vraagje, ik wil wel weer 's een nieuwe programmeertaal leren, maar is C++ niet een beetje ouderwets? Kan ik dan niet beter een iets recentere taal leren?
C++ is een hele goede taal om te leren programmeren, maar zodra je het eenmaal kunt raad ik je aan naar andere talen over te stappen.
  woensdag 13 juni 2012 @ 19:10:41 #44
292596 Faux.
Fan van zichzelf
pi_112849962
quote:
7s.gif Op woensdag 13 juni 2012 18:27 schreef thabit het volgende:

[..]

C++ is een hele goede taal om te leren programmeren, maar zodra je het eenmaal kunt raad ik je aan naar andere talen over te stappen.
Ik kan al programmeren, maar ben wel geïnteresseerd in hoe computers vanbinnen werken en zo.
Hier schreef tong80 het volgende:
Faux is een FOK!held, zoals dat vroeger Gellarboy en Brechtje waren. Users die je koestert.
pi_112851229
quote:
0s.gif Op woensdag 13 juni 2012 15:33 schreef -tape- het volgende:
Ik heb een probleem; ik heb een tentamen van vorig jaar bekeken over programmeren in C#. Nu snap ik eigenlijk alle opdrachten alleen kom ik er uit 1 niet uit:

[ afbeelding ]

Ik hoef niet de volledige uitwerking, alleen maar even een opzetje hoe dit aangepakt zou moeten worden. Ik dacht zelf aan een for-loop of een while-loop maar kan er niet achter komen hoe je dan individueel al die karakters omzet naar een getal. Iemand enig idee? Alvast bedankt :P
Als ik je goed begrijp, dan staat je antwoord al in de opgave. Je vraagt hoe een karakter 'x' om te zetten naar getal n, toch? We nemen aan dat je op een of andere manier de karakters individueel aan kunt spreken. Nu moet je 'a' omzetten naar 1, 'b' naar 2 enzovoorts.

In de opgave staat dat je 'a' om kunt zetten naar het getal 97. Karakter 'b' kan je op dezelfde manier omzetten naar 98. Deze getallen zou je kunnen gebruiken om de karakters om te rekenen naar hun getal-code. Er zijn andere manieren (een groot switch-statement, bijvoorbeeld), maar deze aanpak ligt voor de hand.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_112851576
quote:
11s.gif Op woensdag 13 juni 2012 16:33 schreef Faux. het volgende:
Vraagje, ik wil wel weer 's een nieuwe programmeertaal leren, maar is C++ niet een beetje ouderwets? Kan ik dan niet beter een iets recentere taal leren?
Ik ben wel nieuwsgierig - waarom denk je dat C++ ouderwets is?

Een antwoord op je vraag is natuurlijk niet te geven. Het klinkt alsof je het voor de lol doet. In dat geval maakt het natuurlijk niet uit hoe nuttig de programmeertaal is en zou ik zeggen: kies wat je leuk lijkt.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_112856815
quote:
7s.gif Op woensdag 13 juni 2012 19:10 schreef Faux. het volgende:

[..]

Ik kan al programmeren, maar ben wel geïnteresseerd in hoe computers vanbinnen werken en zo.
In dat opzicht kan C++ handig zijn. Het dwingt je om te 'denken' als de computer/compiler.
  donderdag 14 juni 2012 @ 00:10:42 #48
189216 netolk
maar dan andersom
pi_112870136
quote:
0s.gif Op woensdag 13 juni 2012 21:05 schreef thabit het volgende:

[..]

In dat opzicht kan C++ handig zijn. Het dwingt je om te 'denken' als de computer/compiler.
ahh, ik wist het!

AI bestaat al lang :P
Beware of the Raping Zebra's
  donderdag 14 juni 2012 @ 08:16:12 #49
292596 Faux.
Fan van zichzelf
pi_112874408
quote:
0s.gif Op woensdag 13 juni 2012 19:39 schreef GS42 het volgende:

[..]

Ik ben wel nieuwsgierig - waarom denk je dat C++ ouderwets is?

Een antwoord op je vraag is natuurlijk niet te geven. Het klinkt alsof je het voor de lol doet. In dat geval maakt het natuurlijk niet uit hoe nuttig de programmeertaal is en zou ik zeggen: kies wat je leuk lijkt.
Programmeren doe ik inderdaad voor de lol. Het is natuurlijk wel handig om er uiteindelijk een mooi programma mee te kunnen schrijven, maar het is niet zo dat ik persé de beste programmeertaal wil leren.

quote:
0s.gif Op woensdag 13 juni 2012 21:05 schreef thabit het volgende:

[..]

In dat opzicht kan C++ handig zijn. Het dwingt je om te 'denken' als de computer/compiler.
Dat lijkt me leuk. Ik ga het proberen, dank jullie :)
Hier schreef tong80 het volgende:
Faux is een FOK!held, zoals dat vroeger Gellarboy en Brechtje waren. Users die je koestert.
  donderdag 14 juni 2012 @ 10:07:34 #50
85514 ralfie
!Yvan eht nioj
pi_112876504
quote:
0s.gif Op woensdag 13 juni 2012 15:33 schreef -tape- het volgende:
Ik heb een probleem; ik heb een tentamen van vorig jaar bekeken over programmeren in C#. Nu snap ik eigenlijk alle opdrachten alleen kom ik er uit 1 niet uit:

[ afbeelding ]

Ik hoef niet de volledige uitwerking, alleen maar even een opzetje hoe dit aangepakt zou moeten worden. Ik dacht zelf aan een for-loop of een while-loop maar kan er niet achter komen hoe je dan individueel al die karakters omzet naar een getal. Iemand enig idee? Alvast bedankt :P
1
2
3
4
string outp = string.empty;
foreach( char c in string.ToLower())
   outp+='-' + (((int)c - 'a')+1).ToString();
return outp.Substring(1);
Vergeleken met c++ is C# zoo makkelijk.
  donderdag 14 juni 2012 @ 11:22:01 #51
314941 Ai_KaRaMBa
Eat my shorts!
pi_112878736
quote:
9s.gif Op donderdag 14 juni 2012 10:07 schreef ralfie het volgende:

[..]
[ code verwijderd ]

Vergeleken met c++ is C# zoo makkelijk.
Dat is in C toch niet heel veel moeilijker?
1
2
3
4
5
6
7
8
char tmp[33];
char outp[1024] = {0};
for(char *c=in; *c; c++)
{
    strcat(outp, "-"); 
    strcat(outp, itoa(toupper(*c)-'A'+1, tmp, 10));
}
return strdup(&outp[1]);
pi_112882862
Ha, nu wil ik ook meedoen met een echte C++ oplossing:

1
2
3
4
5
std::string encode(std::string const &input) {
    std::ostringstream ss;
    std::for_each(input.begin(), input.end(), [&ss](char c){ ss << c - 96 << '-'; });
    return ss.str();
}

Ik vind het wel wat hebben.
"Slechts diegene mag slopen die iets beters kan bouwen."
  donderdag 14 juni 2012 @ 13:11:07 #53
314941 Ai_KaRaMBa
Eat my shorts!
pi_112883052
Je vergeet de laatste '-' eraf te strippen, en een toupper/tolower ergens :P

Maar goed: de algemene aanpak in C, C++ en C# is hetzelfde; zitten wat kleine API/syntax verschillen in, maar ik zie niet waarom het ene fundamenteel makkelijker zou zijn dan het andere
pi_112883137
quote:
3s.gif Op donderdag 14 juni 2012 13:11 schreef Ai_KaRaMBa het volgende:
Je vergeet de laatste '-' eraf te strippen, en een toupper/tolower ergens :P
Volgens de opgave is de input altijd in kleine letters en mag de laatste '-' blijven staan. Wel lezen he? ;)
quote:
Maar goed: de algemene aanpak in C, C++ en C# is hetzelfde; zitten wat kleine API/syntax verschillen in, maar ik zie niet waarom het ene fundamenteel makkelijker zou zijn dan het andere
Maar je hebt gelijk, natuurlijk. De oplossingen zijn precies hetzelfde. De programmeertaal is voorkeur.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_112883316
quote:
9s.gif Op donderdag 14 juni 2012 10:07 schreef ralfie het volgende:

[..]
[ code verwijderd ]

Vergeleken met c++ is C# zoo makkelijk.
1return "-".join([str(ord(c) - ord("a") + 1) for c in string])
Nog makkelijker! String parsing moet je niet in C-watdanook willen doen.

[ Bericht 1% gewijzigd door thabit op 14-06-2012 15:06:10 ]
  donderdag 14 juni 2012 @ 13:28:17 #56
314941 Ai_KaRaMBa
Eat my shorts!
pi_112883753
quote:
0s.gif Op donderdag 14 juni 2012 13:13 schreef GS42 het volgende:

[..]

Volgens de opgave is de input altijd in kleine letters en mag de laatste '-' blijven staan. Wel lezen he? ;)
Oh, ik had de opgave niet gelezen... Ik had mijn code gelijk getrokken aan die van ralfie :P
pi_112883934
Als je de opgave nog eens goed leest, dan zie je dat het weghalen van de laatste "-" punten oplevert.
pi_112886991
quote:
14s.gif Op donderdag 14 juni 2012 13:17 schreef thabit het volgende:

Nog makkelijker! String parsing moet je niet in C-watdanook willen doen.
Tsja, uiteindelijk doet Python het ook in C. Er zijn natuurlijk ook parsergeneratoren die het parsen van tekst prachtig doen, zoals de combinatie van Flex en Bison. Daarmee kan je tekst parsen in een soort meta-taaltje waarna de parsergenerator de broncode voor je genereert en je zelf niets hoeft te schijven. De programma's worden daarom ook wel compiler-compilers genoemd. :)

Trouwens, nu we zo enthousiast met een simpel opdrachtje bezig zijn, vraag ik me af of jullie Project Euler ook kennen. Het is een website met programmeerpuzzels, meestal gecombineerd met een beetje wiskunde. Het begin is goed te doen, maar de opgaves worden steeds lastiger. Iemand die het kent of zelfs meedoet?
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_112887697
quote:
0s.gif Op donderdag 14 juni 2012 14:44 schreef GS42 het volgende:

[..]

Trouwens, nu we zo enthousiast met een simpel opdrachtje bezig zijn, vraag ik me af of jullie Project Euler ook kennen. Het is een website met programmeerpuzzels, meestal gecombineerd met een beetje wiskunde. Het begin is goed te doen, maar de opgaves worden steeds lastiger. Iemand die het kent of zelfs meedoet?
Zeker, erg leuke site! Ik moet bekennen dat ik er uit zelfbescherming niet te vaak op zit, omdat ik anders hele dagen niks anders doe.
  donderdag 14 juni 2012 @ 15:59:20 #60
314941 Ai_KaRaMBa
Eat my shorts!
pi_112889980
Ik ken 't idd! Dat soort programmeer uitdagingen zijn trouwens altijd leuk.

Ik heb in het verleden ook wel deelgenomen aan USACO, TopCoder, Codecup en de ACM-ICPC (nooit verder gekomen dan de NWERC trouwens). Allemaal net wat anders van opzet, maar ook allemaal leuk om aan deel te nemen.

Helaas heb ik op het moment een beetje last van tijdgebrek }:|
  vrijdag 15 juni 2012 @ 14:35:15 #61
189216 netolk
maar dan andersom
pi_112928543
quote:
0s.gif Op donderdag 14 juni 2012 14:44 schreef GS42 het volgende:

Trouwens, nu we zo enthousiast met een simpel opdrachtje bezig zijn, vraag ik me af of jullie Project Euler ook kennen. Het is een website met programmeerpuzzels, meestal gecombineerd met een beetje wiskunde. Het begin is goed te doen, maar de opgaves worden steeds lastiger. Iemand die het kent of zelfs meedoet?
Nee had ik nog nooit van gehoord maar zit er idd zeer interessant uit, ik ga na mijn tentamens denk ik maar eens even goed bekijken (als ik het er voor doe haal ik mijn tentamens waarschijnlijk niet meer)
Beware of the Raping Zebra's
pi_112928951
Ik heb als fysicus een c++ cursus gedaan op de universiteit.
En ik vind het altijd leuk om dummies te helpen. :)
pi_112928978
quote:
0s.gif Op donderdag 14 juni 2012 14:44 schreef GS42 het volgende:
Trouwens, nu we zo enthousiast met een simpel opdrachtje bezig zijn, vraag ik me af of jullie Project Euler ook kennen. Het is een website met programmeerpuzzels, meestal gecombineerd met een beetje wiskunde. Het begin is goed te doen, maar de opgaves worden steeds lastiger. Iemand die het kent of zelfs meedoet?
Ik ben daar mee bezig met amd64 assembly en wiskunde, voor sommige heb je geen programma nodig.
pi_114769629
quote:
0s.gif Op donderdag 14 juni 2012 14:44 schreef GS42 het volgende:
Trouwens, nu we zo enthousiast met een simpel opdrachtje bezig zijn, vraag ik me af of jullie Project Euler ook kennen. Het is een website met programmeerpuzzels, meestal gecombineerd met een beetje wiskunde. Het begin is goed te doen, maar de opgaves worden steeds lastiger. Iemand die het kent of zelfs meedoet?
Ik ben pas begonnen met C++ te leren. Ik probeer het te doen aan de hand van die projecteuler site. Het is me gelukt de eerste drie vragen op te lossen. Het is misschien niet moeilijk als je weet hoe C++ in elkaar zit, maar voor mij is het een hele opgave (maar wel een leuke :) ).

Ik ben nu aanbeland bij het volgende probleem:
quote:
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.

Find the largest palindrome made from the product of two 3-digit numbers.
Mijn aanpak is als volgt:
1. Maak een functie die een getal opsplitst in zijn cijfers. Dus bvb: 123 --> 1, 2, 3
2. Maak een functie die het eerste en laatste cijfer vergelijkt, het tweede en het één na laatste, etc. Als die allemaal hetzelfde zijn dan is het een palindroom.
3. Genereer alle producten van 3 cijfers en pas 1. en 2. toe. (dat kan vast ook efficiënter)

Ik loop al vast bij stap 1. Het is me wel gelukt om die functie te maken, die van een getal 123 een array {1,2,3} maakt, alleen het lukt me niet om die in zijn geheel te "returnen". Ik heb ook van alles geprobeerd met pointers en vectors en van alles bij elkaar gegoogled, maar ik kom er maar niet verder mee.

Dit is mijn huidige code, waar ik ter illustratie een getal return. De hele array lukt niet, dus als iemand me daarmee kan helpen, graag!

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
#include <iostream>
#include <vector>
using namespace std;

//Deze functie bepaalt het aantal cijfers in een getal
int numDigits(int q){
    if(q>0 && q<10){return(1);};
    if(q>9 && q<100){return(2);};
    if(q>99 && q<1000){return(3);};
    if(q>999 && q<10000){return(4);};
    if(q>9999 && q<1000000){return(5);};
    if(q>99999 && q<10000000){return(6);};
    if(q>999999 && q<100000000){return(7);};
    if(q>9999999 && q<1000000000){return(8);};
    }

//Deze functie splitst het getal op in zijn cijfers
int digit(int p){
    int z;
    int k(1);
    int l(1);
    int i(0);
    int m[numDigits(p)];
    for(z=0; z<numDigits(p); z++){
        k=(p/l)%10;
        l=10*l;
        m[i]=k;
        i++;
        }
        return m[1];
    }

int main(){
    cout << digit(52);
    return 0;
    }
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')