1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <fok/tvp.h> #define USER_ID 254493 int main(int argc, char *argv[]) { if(argc < 2) { printf("Usage: %s <topic number>\n", argv[0]); exit(1); } if(tvp_place(atoi(argv[1]), USER_ID)) { printf("TVP gemacht!\n"); exit(0); } else { printf("Error placing TVP: %s", fok_last_error()); exit(1); } } |
1 |
quote:
1 |
Wat dat void main() niet??quote:Op donderdag 30 september 2010 06:16 schreef Cruise.Elroy het volgende:
Omg het compileert niet meerBlijkbaar iets kapot gegaan bij ctrl-c ctrl-v uit vorige topics
1 |
Ik compileer ook in microsoft meukquote:Op donderdag 30 september 2010 21:11 schreef netolk het volgende:
umm nee void main compileert bij mijn weten alleen in microsoft meuk en in C maar niet in C++...
[ code verwijderd ]
Die schrijven voor de verschillende processoren een apart stukje assembler. Omdat ze niet aan de gang willen blijven en er nogal veel verschillende processoren zijn, schrijven ze de code vaak ook nog in C.quote:Op zondag 3 oktober 2010 14:38 schreef minibeer het volgende:
hey. ik had een klein vraagje over assembleertaal (en ik dacht dat dit het topic was waarin ik mijn vraag het beste kan stellen). Is het niet zo dat je voor elke processor een andere assembleertaal hebt?
Hoe doen bedrijven dat dan die assembleertaal voor een stukje code gebruiken (bijvoorbeeld gebruiken met c++)?
Ok. Zelf code in assembleertaal schrijven is dus eigenlijk onbegonnen werk, als je wil dat je programmatje compatibel is naar andere processoren?quote:Op zondag 3 oktober 2010 14:41 schreef thabit het volgende:
[..]
Die schrijven voor de verschillende processoren een apart stukje assembler. Omdat ze niet aan de gang willen blijven en er nogal veel verschillende processoren zijn, schrijven ze de code vaak ook nog in C.
Je moet de stukken die je in assembler wilt schrijven, ook in C schrijven, zodat het in elk geval voor elke processor compileert.quote:Op zondag 3 oktober 2010 14:51 schreef minibeer het volgende:
[..]
Ok. Zelf code in assembleertaal schrijven is dus eigenlijk onbegonnen werk, als je wil dat je programmatje compatibel is naar andere processoren?
quote:What language was RollerCoaster Tycoon programmed in?
It's 99% written in x86 assembler/machine code (yes, really!), with a small amount of C code used to interface to MS Windows and DirectX.
http://www.chrissawyergames.com/faq3.htm
Ja, hij wordt na een aantal honderd keer zien alleen een beetje saai. Hé, Diabox?quote:
homoquote:Op zondag 3 oktober 2010 15:59 schreef Luchtkoker het volgende:
[..]
Ja, hij wordt na een aantal honderd keer zien alleen een beetje saai. Hé, Diabox?
ah... ik dacht dat c en c++ ook wel gebruikt werden om programma's op zichzelf mee te schrijven, maar ik bedenk net dat het een enorm gekloot is om in c++ een simpel window te openen. eigenlijk alle programma's die ik schrijf zijn gewoon in 1 programmeertaal... Hoe doet men dat dan, verschillende programmeertalen 'door elkaar' gebruiken? Libraries met methodes/functies erin ofzo? (dat is de manier waarop ik dat weleens heb gedaan met qbasic en assembleertaalquote:Op zondag 3 oktober 2010 15:01 schreef thabit het volgende:
[..]
Je moet de stukken die je in assembler wilt schrijven, ook in C schrijven, zodat het in elk geval voor elke processor compileert.
Je moet er een beetje een hiërarchie in zien. Alles in C(++) schrijven is ook onbegonnen werk, moet je alleen doen bij die stukken code die snel en geheugen-efficiënt dienen te zijn. Daarbovenop zet je een hogere programmeertaal (eentje met een fatsoenlijke syntax en garbage collecting). Binnen je C(++) kun je de meest kritieke stukken nog in inline-assembler schrijven, alleen zit je dan wel veel met #ifdef en zo te kloten. Zelfs tussen linux en windows is assembler niet hetzelfde (M$ doet er alles aan om dingen maar niet portable te maken, zelfs de syntax voor x86-assemblercode is anders).
Ja, DLLs dus (dynamic linked libraries), Object files, etc.quote:Op zondag 3 oktober 2010 17:22 schreef minibeer het volgende:
[..]
ah... ik dacht dat c en c++ ook wel gebruikt werden om programma's op zichzelf mee te schrijven, maar ik bedenk net dat het een enorm gekloot is om in c++ een simpel window te openen. eigenlijk alle programma's die ik schrijf zijn gewoon in 1 programmeertaal... Hoe doet men dat dan, verschillende programmeertalen 'door elkaar' gebruiken? Libraries met methodes/functies erin ofzo? (dat is de manier waarop ik dat weleens heb gedaan met qbasic en assembleertaal)
Dat wordt inderdaad gedaan, maar je geeft zelf al aan waarom dat niet handig is. Veel mensen blijven toch in oude patronen vastgeroest zitten: 20 jaar geleden deed men het zo, dus doen we het nu nog steeds zo.quote:Op zondag 3 oktober 2010 17:22 schreef minibeer het volgende:
[..]
ah... ik dacht dat c en c++ ook wel gebruikt werden om programma's op zichzelf mee te schrijven, maar ik bedenk net dat het een enorm gekloot is om in c++ een simpel window te openen.
Dat kan inderdaad met libraries. Vaak moet je dan wel bovenop je C-code nog een speciale interface schrijven waarmee je dan vanuit de hogere programmeertaal de C-code kan aanroepen.quote:eigenlijk alle programma's die ik schrijf zijn gewoon in 1 programmeertaal... Hoe doet men dat dan, verschillende programmeertalen 'door elkaar' gebruiken? Libraries met methodes/functies erin ofzo? (dat is de manier waarop ik dat weleens heb gedaan met qbasic en assembleertaal)
Gebruik maken van libraries, die dus in elke taal kunnen zijn geschreven. Ikzelf schrijf alles in C++, en ik heb gewoon zelf een simpele wrapper lib geschreven voor het maken van vensters e.d. en die gebruikt op zijn beurt weer de standaard functies uit de windows headers. CreateWindowEx() etc.quote:Op zondag 3 oktober 2010 17:22 schreef minibeer het volgende:
[..]
ah... ik dacht dat c en c++ ook wel gebruikt werden om programma's op zichzelf mee te schrijven, maar ik bedenk net dat het een enorm gekloot is om in c++ een simpel window te openen. eigenlijk alle programma's die ik schrijf zijn gewoon in 1 programmeertaal... Hoe doet men dat dan, verschillende programmeertalen 'door elkaar' gebruiken? Libraries met methodes/functies erin ofzo? (dat is de manier waarop ik dat weleens heb gedaan met qbasic en assembleertaal)
Meestal schrijf je "snelle" code in C(++) waar je gewoon goed nadenkt over je geheugen-access, branches, cache misses etc. Echt ASM programmeren is eigenlijk niet nodig op huidige PC/Console hardware, en als het al nodig is, dan is het voor je gedaan door de vendor en in een leuke lib gezet voor jequote:Op zondag 3 oktober 2010 15:01 schreef thabit het volgende:
[..]
Je moet de stukken die je in assembler wilt schrijven, ook in C schrijven, zodat het in elk geval voor elke processor compileert.
Je moet er een beetje een hiërarchie in zien. Alles in C(++) schrijven is ook onbegonnen werk, moet je alleen doen bij die stukken code die snel en geheugen-efficiënt dienen te zijn. Daarbovenop zet je een hogere programmeertaal (eentje met een fatsoenlijke syntax en garbage collecting). Binnen je C(++) kun je de meest kritieke stukken nog in inline-assembler schrijven, alleen zit je dan wel veel met #ifdef en zo te kloten. Zelfs tussen linux en windows is assembler niet hetzelfde (M$ doet er alles aan om dingen maar niet portable te maken, zelfs de syntax voor x86-assemblercode is anders).
Voor elke proc alles dubbel schrijven en/of een doolhof aan #ifdefquote:Op zondag 3 oktober 2010 14:51 schreef minibeer het volgende:
[..]
Ok. Zelf code in assembleertaal schrijven is dus eigenlijk onbegonnen werk, als je wil dat je programmatje compatibel is naar andere processoren?
De originele RCT doet het dan ook alleen op compatible 8086 processoren, denk ik. Maar dat was toentertijd ook de standaard, dat had iedereen thuis staan. Die basisset wordt tegenwoordig door elke CPU ondersteunt.quote:Op maandag 4 oktober 2010 10:47 schreef minibeer het volgende:
ah bedankt voor de reacties![]()
maar hoe kan het dan dat rollercoaster tycoon het op verschillende processors doet (tenminste ik neem aan dat ie dat doet), terwijl het voor 99% in asm is geschreven?
Ok, nu begrijp ik hetquote:Op maandag 4 oktober 2010 14:07 schreef Cruise.Elroy het volgende:
[..]
De originele RCT doet het dan ook alleen op compatible 8086 processoren, denk ik. Maar dat was toentertijd ook de standaard, dat had iedereen thuis staan. Die basisset wordt tegenwoordig door elke CPU ondersteunt.
Vergeet niet dat Intel en AMD misschien wel verschillende CPUs maken, maar ze ondersteunen allemaal (nagenoeg) precies dezelfde instructieset.Pas als je echt naar andere architecturen gaat kijken, zoals embedded systemen, rare mainframes of Macs met PowerPCs krijg je problemen.
Er zijn (nu nog?) kleine verschillen in de instruciesets tussen AMD en Intel, maar die instructies worden standaard niet gebruikt door je C++ compiler en als je ASM zit te klooien laatje die ook gewoon links liggen tenzij je echt hele specifieke redenen hebt.
Ik weet niet of je het hebt meegemaakt, maar toen de MMX processoren op de markt kwamen waren er spellen die alleen draaide op processoren die MMX instructies ondersteunden, zelfde met 3DNow instrucies en nog wat van die uitbreidingen.
Zelfs nu kan je bij het compileren van je programma in Visual Studio aangeven dat hij "modernere" instructies mag gebruiken, en dan werken je programma's dus niet op oudere PCs, bijv. niet op oude AMDs maar wel op oude intel CPUs. Laatst nog mee lopen klooien, en je kan er best wel wat procenten uitpersen.
Gelukkig wel zeg anders zou het wel heel rot programmeren zijn...quote:Op maandag 4 oktober 2010 18:12 schreef Luchtkoker het volgende:
Nee, er zit een verschil tussen een andere processor en een andere architectuur. Niet elke processor heeft een andere architectuur; er zijn vele malen meer processoren dan architecturen, bovendien is het (met name hedendaags) veelal gestandaardiseerd zoals Cruise.Elroy zegt, om cross-processor compatibility te maximaliseren.
Ja, dat zou ook wel raar zijn want gecompileerd c(++) is even portable als gecompileerd ASM.quote:Op maandag 4 oktober 2010 18:09 schreef minibeer het volgende:
[..]
Ok, nu begrijp ik het.
Ik dacht dat asm zo erg verschilde dat je zo ongeveer per computer echt sowieso opnieuw moest compileren, maar dat valt dus wel mee.
Komt het niet (ongeveer) op het zelfde neer?quote:Op dinsdag 5 oktober 2010 08:32 schreef Cruise.Elroy het volgende:
[..]
Ja, dat zou ook wel raar zijn want gecompileerd c(++) is even portable als gecompileerd ASM.
Ja daswaar. Maar ik blijf het raar vinden, eerst een fakking dure xbox 360 kopen, dan ook nog veel geld moeten betalen om er iets op te zetten wat je zelf hebt geschreven. Ik vind 50 euro ook belachelijk veel te duur voor wat je ervoor terugkrijgt.quote:Op woensdag 6 oktober 2010 23:20 schreef Cruise.Elroy het volgende:
Met XNA kan je nog steeds gewoon leuke apps maken voor op de PC.Als je dan echt iets tofs maakt kan je het altijd nog op de Xbox zetten
ja maar maakt niet uit toch, je betaalt ervoor, dan lijkt het me logisch dat je er dingen op mag zetten, net zoals bij een computer bijvoorbeeld. En als het nou iets eenmaligs was, of dat je er iets fysieks voor terugkrijgt, maar nee. Het is gewoon dat microsoft geld wil hebben, je betaalt verder niet omdat het hun geld kost ofzo. Voor kleine gamebedrijven is 50 euro goed te doen, maarja ik ben student en ik weet niet eens of ik er vaker dan 1 keer iets op wil zetten.quote:Op woensdag 6 oktober 2010 23:54 schreef Cruise.Elroy het volgende:
Euhm die XBOX koop je als spelsysteem, niet als devkit.
Er zijn andere manieren ja, maar 50 euro is een koopje vergeleken met het gedoe om het op andere manieren aan de praat te krijgen.
Je zal wel gelijk hebben, ik vind gewoon dat ze het niet slim doen.Want nu moet je als je wil beginnen al 50 euro betalen. Ze zouden beter iets kunnen bedenken waarin je vrij bent om te beginnen en dan betaald voor iets waar je echt iets aan hebt.quote:Op donderdag 7 oktober 2010 00:03 schreef Cruise.Elroy het volgende:
Gamebedrijven hebben devkits van 5000+ euro per stuk.
En dat hele "je koopt het dus je mag er alles op" geldt niet voor dit soort dingen afaik. Ding is niet gemaakt als devkit dus je kan het gewoon zien als een accesoire, zoals een softwaretitel. En het ondersteunen van de XNA community kost ook veel geld en tijd, waar zij verder niets van terug zien. Het maken van een commerciele game gaat trouwens weer totaal anders.
Haast niet voor te stellen als je dit zo ziet:quote:
umm... denk dat je plaatje niet werkt....quote:Op zondag 10 oktober 2010 00:38 schreef Outlined het volgende:
[..]
Haast niet voor te stellen als je dit zo ziet:
is dit niet veel leesbaarderderquote:Op maandag 11 oktober 2010 00:16 schreef minibeer het volgende:
in c++ kon je zon leuk truukje doen waardoor je een reference als type van een functie kan hebben. Waardoor je sit soort dingen kan doen:
Grootste(variable1, variabele2) = 5;
Waardoor de grootste van die 2 variabelen op 5 werd gezet.
Dit kan niet in c#, of wel?
1 2 3 4 | variable1 = 5; else variable2 = 5; |
Lijkt me leesbaarder maar is wel meer code waardoor het toch onduidelijk kan worden als je zelf die andere notatie gewend bent...quote:Op maandag 11 oktober 2010 00:27 schreef Outlined het volgende:
[..]
is dit niet veel leesbaarderder
[ code verwijderd ]
Vind je? Semantisch niet echt geweldig leesbaar. Liever:quote:Op maandag 11 oktober 2010 00:27 schreef Outlined het volgende:
[..]
is dit niet veel leesbaarderder
[ code verwijderd ]
1 |
1 |
Gastquote:Op maandag 11 oktober 2010 13:00 schreef Luchtkoker het volgende:
huh reference-typed, wat is dat, ik snap er niks van
classes wel ja, structs nietquote:Op maandag 11 oktober 2010 12:59 schreef thabit het volgende:
Ik ken C# niet zo goed, maar is het niet zo dat daar objecten per definitie reference-typed zijn? Dan zou het op zich met objecten moeten kunnen (mogelijk niet met built-in types).
Ben geen C# wiz maar je kan volgens mij expliciet aangeven dat je iets by ref wilt sturen, dus ik neem aan dat je het ook met primitives en structs kan.quote:Op maandag 11 oktober 2010 13:17 schreef minibeer het volgende:
[..]
classes wel ja, structs niet
standaardtypes niet nee
dus ik denk dat het idd alleen met class-objecten kan
quote:Op maandag 11 oktober 2010 16:05 schreef Cruise.Elroy het volgende:
[..]
Ben geen C# wiz maar je kan volgens mij expliciet aangeven dat je iets by ref wilt sturen, dus ik neem aan dat je het ook met primitives en structs kan.
Als je functie een class returnt is het altijd by value dan (snap ik voor scope vars, maar ook als je in de functie bijv. een new doet?) En als je dan een class maakt met daarin een class reference en die returnt?quote:Op maandag 11 oktober 2010 17:00 schreef minibeer het volgende:
[..]
![]()
maar helaas kan je geen reference returnen als waarde van een methode op die manier..
Left side of an expression must be a variable or object ofzoiets kreeg ik de vorige keer. Dus nee, het zit er niet in op die manierquote:Op dinsdag 12 oktober 2010 08:31 schreef Cruise.Elroy het volgende:
[..]
Als je functie een class returnt is het altijd by value dan (snap ik voor scope vars, maar ook als je in de functie bijv. een new doet?) En als je dan een class maakt met daarin een class reference en die returnt?
wat zijn je bronnen?quote:Op dinsdag 12 oktober 2010 14:17 schreef Cruise.Elroy het volgende:
Als ik zo even snel google dan kan het wel gewoon
quote:Op dinsdag 12 oktober 2010 17:33 schreef thabit het volgende:
Misschien toch maar een apart C#-topic maken?
Wat zou kunnen is als je een ValueObject hebt met daarin een value, is dat je iets als dit doet:quote:Op maandag 11 oktober 2010 12:59 schreef thabit het volgende:
Ik ken C# niet zo goed, maar is het niet zo dat daar objecten per definitie reference-typed zijn? Dan zou het op zich met objecten moeten kunnen (mogelijk niet met built-in types).
1 2 3 4 5 6 7 8 9 | { if(v1.value > v2.value) return v1; else return v2; } Grootste(v1, v2).value = 5; |
Tja, maar C# heeft echt geen hout met C++ te maken.quote:Op dinsdag 12 oktober 2010 17:40 schreef minibeer het volgende:
[..]
![]()
ik ben de enige die vragen stelt dan ben ik bang...
Wat is je vraag precies? Jouw functie doet exact hetzelfde als mijn "grootste" functie?quote:Op dinsdag 12 oktober 2010 17:44 schreef Cruise.Elroy het volgende:
Kan je niet gewoon
MyClass functie (MyClass a, MyClass b)
{
if (a.waarde > b.waarde) return a; else return b;
}
Of maakt hij bij returnen dan altijd een kopie?
En zo ja, hoe return je dan een nieuw gemaakt object vanuit een functie zonder extra kopieren? of kan dat gewoon niet.
Tuurlijk, maar het ging om primitives, niet om objecten. Dat C++ voorbeeld m.b.t. het ophogen van ints (primitives) werkt niet.quote:Op dinsdag 12 oktober 2010 17:48 schreef Cruise.Elroy het volgende:
Ok dus dan kan je gewoon:
functie(A,B).increase() doen? Zeg maar wat er werd gevraagd.
Goed planquote:Op dinsdag 12 oktober 2010 19:57 schreef minibeer het volgende:
ik heb weer een vraaag over c#
zal ik dan maar gelijk een topic aanmaken?
moet ik dan een OP maken of is er ergens in een grijs verleden al een gemaakt?quote:
Je bedoelt neem ik aan dat C++ niet gelijk is aan C#. Je vergelijkt nu een taal met een platform. C# is .Net, maar .Net is niet perse C#.quote:Op woensdag 13 oktober 2010 11:22 schreef Cruise.Elroy het volgende:
Nee maak aub een nieuw topic aan. C# is zeker niet gelijk aan .NET. vooral voor beginnersvragen die vooral over de syntax e.d. van de taal zelf zullen gaan
Omdat C# en C++ geen hol met mekaar te maken hebben. Dat is net zo iets als Java en PHP in een topic pleuren omdat ze toevallig beiden curly braces gebruiken.quote:Op woensdag 13 oktober 2010 11:32 schreef minibeer het volgende:
waarom zou je c# niet bij c en c++ doen eigenlijk?
en dan java er ook gelijk bijplempen
Nee ik bedoel wat ik schreef.quote:Op woensdag 13 oktober 2010 12:23 schreef Catbert het volgende:
Hier voor Micorosft.NET - Deel 2
[..]
Je bedoelt neem ik aan dat C++ niet gelijk is aan C#. Je vergelijkt nu een taal met een platform. C# is .Net, maar .Net is niet perse C#.
[..]
Omdat C# en C++ geen hol met mekaar te maken hebben. Dat is net zo iets als Java en PHP in een topic pleuren omdat ze toevallig beiden curly braces gebruiken.
Een belangrijk onderdeel van de "Hoe doe ik" vragen gaat gewoon over het .Net framework. Vb.net bijvoorbeeld hoort net zoals C# in dat topic.quote:Op woensdag 13 oktober 2010 13:52 schreef Cruise.Elroy het volgende:
Nee ik bedoel wat ik schreef..NET is dus een platform, en vragen over C# zullen niet gaan over het .NET platform maar vooral over de taal zelf. Daarom dus een apart topic. Tenzij het .NET topic gewoon een misnomer is en dat het daar stiekem alleen over C# gaat.
een groot deel wel ja maar lang niet alle schat ik zo...quote:Op woensdag 13 oktober 2010 14:32 schreef Catbert het volgende:
[..]
Een belangrijk onderdeel van de "Hoe doe ik" vragen gaat gewoon over het .Net framework. Vb.net bijvoorbeeld hoort net zoals C# in dat topic.
Vragen over bijvoorbeeld "hoe zet ik een socket connectie op in C#" gaan dus over het framework, en niet specifiek alleen over C#. Dat kan prima samen in een topic, het is niet alsof het daar storm loopt ofzo.quote:Op woensdag 13 oktober 2010 15:30 schreef minibeer het volgende:
een groot deel wel ja maar lang niet alle schat ik zo...
Maar vaak willen ze wel C# code voorbeelden zien etc. Mensen die net met C# beginnen zitten denk ik niet te wachten om een abstracte oplossing te krijgen in het .NET domein.quote:Op woensdag 13 oktober 2010 15:51 schreef Catbert het volgende:
[..]
Vragen over bijvoorbeeld "hoe zet ik een socket connectie op in C#" gaan dus over het framework, en niet specifiek alleen over C#. Dat kan prima samen in een topic, het is niet alsof het daar storm loopt ofzo.
Wie zei er iets over abstract? Voorbeelden in C# maken nog steeds gebruik van het .Net framework.quote:Op woensdag 13 oktober 2010 16:08 schreef Cruise.Elroy het volgende:
Maar vaak willen ze wel C# code voorbeelden zien etc. Mensen die net met C# beginnen zitten denk ik niet te wachten om een abstracte oplossing te krijgen in het .NET domein.
Tja, als ze dat al niet snappen...quote:Nouja van mij hoeft het niet, maar ik denk dat onervaren mensen die hulp zoeken met C# echt niet in/naar een .NET topic gaan zoeken.
Jij weet net zo goed als ik dat 90% van de "help!" vragen die we hier krijgen gaan over syntax errors of vragen over classes en instanties e.d. Dat heeft weinig tot niets met .NET te maken.quote:Op woensdag 13 oktober 2010 16:52 schreef Catbert het volgende:
[..]
Wie zei er iets over abstract? Voorbeelden in C# maken nog steeds gebruik van het .Net framework.
[..]
Tja, als ze dat al niet snappen...
inderdaad...quote:Op woensdag 13 oktober 2010 17:02 schreef Cruise.Elroy het volgende:
[..]
Jij weet net zo goed als ik dat 90% van de "help!" vragen die we hier krijgen gaan over syntax errors of vragen over classes en instanties e.d. Dat heeft weinig tot niets met .NET te maken.
En veel C# beginners weten wel van het .NET platform af maar zullen nooit naar een .NET thread zoeken om een vraag over een error die de C# compiler opgeeft. En dat is helemaal niet zo'n gekke gedachte.
Dan zet je .Net/C#/Vb.net in de titel, sjeezquote:Op woensdag 13 oktober 2010 17:02 schreef Cruise.Elroy het volgende:
Jij weet net zo goed als ik dat 90% van de "help!" vragen die we hier krijgen gaan over syntax errors of vragen over classes en instanties e.d. Dat heeft weinig tot niets met .NET te maken.
En veel C# beginners weten wel van het .NET platform af maar zullen nooit naar een .NET thread zoeken om een vraag over een error die de C# compiler opgeeft. En dat is helemaal niet zo'n gekke gedachte.
quote:Op woensdag 13 oktober 2010 17:08 schreef Catbert het volgende:
[..]
Dan zet je .Net/C#/Vb.net in de titel, sjeez
hihi, zie je, zo is overal een oplossing voorquote:Op woensdag 13 oktober 2010 17:08 schreef Catbert het volgende:
[..]
Dan zet je .Net/C#/Vb.net in de titel, sjeez
quote:Op woensdag 20 oktober 2010 01:45 schreef TeringHenkie het volgende:
Eigenlijk is de pracht van .NET dat de taal losgekoppeld is van het platform.Gelukkig hebben ze PHP nog niet geport naar .NET, komen al die noobs weer
Neger aub.quote:Op woensdag 20 oktober 2010 01:45 schreef TeringHenkie het volgende:
Eigenlijk is de pracht van .NET dat de taal losgekoppeld is van het platform.Gelukkig hebben ze PHP nog niet geport naar .NET, komen al die noobs weer
Kijk dat je echt geen fuck van het vakgebied weet is helemaal niet erg, maar dat je dan blind mensen loopt te bitchen vind ik dan wel weer jammer.quote:Op woensdag 20 oktober 2010 10:00 schreef TeringHenkie het volgende:
[..]
Is toch zo? PHP is voor 13-jarigen die "websites maken" als bijbaantje
Heb ik mensen gekwetst ofzo? Ik bedoel alleen maar dat PHP die associatie oproept, het was niet als troll bedoeld.quote:Op woensdag 20 oktober 2010 11:30 schreef Cruise.Elroy het volgende:
[..]
Kijk dat je echt geen fuck van het vakgebied weet is helemaal niet erg, maar dat je dan blind mensen loopt te bitchen vind ik dan wel weer jammer.
Scripttalen vallen of staan met hun libs en daarin is Python nu echt heer en meester als ik dat mag geloven.quote:Op woensdag 20 oktober 2010 11:38 schreef thabit het volgende:
Veegt Python tegenwoordig niet gewoon de vloer aan met al die andere scripttalen? Waarom zou je nog Perl of PHP leren als er ook Python bestaat?
quote:Niet om 't een of 't ander, maar de meeste grote serieuze webapps worden toch echt op basis van Java of .Net gebouwd hoor.Op woensdag 20 oktober 2010 11:30 schreef Cruise.Elroy het volgende:
Kijk dat je echt geen fuck van het vakgebied weet is helemaal niet erg, maar dat je dan blind mensen loopt te bitchen vind ik dan wel weer jammer.
quote:Java kan ik nog begrijpen, maar .NET?!Op woensdag 20 oktober 2010 23:16 schreef Catbert het volgende:
[..]
Niet om 't een of 't ander, maar de meeste grote serieuze webapps worden toch echt op basis van Java of .Net gebouwd hoor.
Dus z'n verwoordig was wat trollerig, maar mijn "vakgebied" is consultantje spelen voor een backend bij dit soort projecten, en dat is ongeveer 50% java, 45% .net, 5% PHP.
quote:Ik snap je punt niet echt, maar er zijn genoeg degelijke PHP projecten en programmeurs. Ging mij om de generalisatieOp woensdag 20 oktober 2010 23:16 schreef Catbert het volgende:
[..]
Niet om 't een of 't ander, maar de meeste grote serieuze webapps worden toch echt op basis van Java of .Net gebouwd hoor.
Dus z'n verwoordig was wat trollerig, maar mijn "vakgebied" is consultantje spelen voor een backend bij dit soort projecten, en dat is ongeveer 50% java, 45% .net, 5% PHP.
quote:Niks mis met .Net.Op donderdag 21 oktober 2010 12:25 schreef Trollface. het volgende:
Java kan ik nog begrijpen, maar .NET?!
quote:Zal best, maar voor grote projecten wordt het erg weinig gebruikt.Op donderdag 21 oktober 2010 13:32 schreef Cruise.Elroy het volgende:
Ik snap je punt niet echt, maar er zijn genoeg degelijke PHP projecten en programmeurs.
quote:De interface zorgt er voor dat je alleen dingen met een class kan doen die de programmeur wil dat je er mee kanOp woensdag 27 oktober 2010 20:09 schreef minibeer het volgende:
even iets heel anders, kan iemand mij vertellen wat het voordeel is van het gebruik van interfaces boven het gebruik van abstracte classes? want eigenlijk heb ik tot nu toe alleen maar nadelen gehoord, ze zijn langzamer etc. En volgens mij is alles wat je met interfaces kan ook met abstract classes te doen, of niet?
quote:Zo ver ik weet heb je geen interfaces in C++ omdat C++ gewoon multiple inheritence ondersteunt.Op woensdag 27 oktober 2010 20:09 schreef minibeer het volgende:
even iets heel anders, kan iemand mij vertellen wat het voordeel is van het gebruik van interfaces boven het gebruik van abstracte classes? want eigenlijk heb ik tot nu toe alleen maar nadelen gehoord, ze zijn langzamer etc. En volgens mij is alles wat je met interfaces kan ook met abstract classes te doen, of niet?
quote:ah tuuuurlijkOp donderdag 28 oktober 2010 10:44 schreef Cruise.Elroy het volgende:
[..]
Zo ver ik weet heb je geen interfaces in C++ omdat C++ gewoon multiple inheritence ondersteunt.
In Java (en C# ?) is het "voordeel" van interfaces dat je er meerdere kan inheriten in één klasse.
Een interface is in C++ gewoon een abstract class met alleen maar virtual abstract functies. En er is geen winst tov. 'normale' abstract classes in C++.
Over waarom je in java en C# geen multiple inheritence hebt maar wel interfaces zijn boeken volgeschreven, dat moet je maar even googlen. Heeft te maken met diepe OOP-zen en rare cases die je daardoor vermijdt.
quote:Dat klopt idd, maar het is net wat je handig vindah tuuuurlijk
ik had gehoord dat interfaces minder verwarrend zijn (omdat je dan alle methoden moet overnemen ofzo?)
quote:Voor simpele tools met een user interface is C# echt veel makkelijker. En ja dat is het wel waard om je in te verdiepen.Op donderdag 28 oktober 2010 14:11 schreef Green1 het volgende:
Zou C++ iets voor mij zijn om me in te verdiepen? Ik wil gewoon wat simpele tooltjes maken.. En ik wil in de (verre) toekomst ook wat andere talen gaan leren.. Ik heb al eens een boekje over C# gekocht, maar dat ging vooral over visual studio. En dit betrof vooral wat je precies aan moest klikken om visual studio de code voor je te laten maken, en dat vond ik niks. Dus C# als taal viel voor mij af.. ook omdat het, volgens mij, vooral voor windows is..
Maar ik wil dus kleine commandline tooltjes voor linux en windows maken.
Ik heb nog niet echt een concreet idee.. Misschien een backup programma'tje ofzo.
Maar is het verstandig om hiervoor C++ te leren, zodat ik daar later verder mee kan, of kan iemand een andere taal aanraden?
Ik heb vrij veel, al zeg ik het zelf, ervaring met php..
quote:hoe zit het eigenlijk met comptabiliteit? ik heb hier nooit zo'n beeld van aangezien ik eigenlijk alleen maar op windows draaiOp donderdag 28 oktober 2010 15:11 schreef Cruise.Elroy het volgende:
[..]
Voor simpele tools met een user interface is C# echt veel makkelijker. En ja dat is het wel waard om je in te verdiepen.C++ kan je daarna nog gaan doen als je echt hele zware apps gaat maken ofzo
quote:Pure C++ draait gewoon op elk platform. C# daarentegen niet, tenminste niet zonder emulatielagen.Op donderdag 28 oktober 2010 15:30 schreef minibeer het volgende:
[..]
hoe zit het eigenlijk met comptabiliteit? ik heb hier nooit zo'n beeld van aangezien ik eigenlijk alleen maar op windows draai
quote:C/C++ werd gebouwd op Unices, dus voeg zowat alle UNIX-based besturingssystemen ook maar toe.Op donderdag 28 oktober 2010 16:38 schreef netolk het volgende:
Mac en Windows draaien zeker C++, en volgens mij word C++ op de andere bekende besturingssystemen ook ondersteund maar dat weet ik niet helemaal zeker
quote:Waarom zou je dat willen?Op donderdag 28 oktober 2010 22:31 schreef TeringHenkie het volgende:
Als ze nou WinForms porten naar native Win32/C++, dan zou sweeeeet zijn
quote:Wat me ook zo irriteerde was, wanneer ik zelfs een simpel hello world maakte. Dat er dan op de één of andere manier een installer bij kwam te zitten, die allerlei zooi eromheen zette. Ik weet de extensies van de bestanden niet meer, maar dat wil ik gewoon niet. Ik wil gewoon een .exe en klaar. Als ik een installer zou willen, dan wil ik dat zelf wel leren, en niet zo'n automatisch voorgekauwd ding..Op donderdag 28 oktober 2010 15:11 schreef Cruise.Elroy het volgende:
[..]
Voor simpele tools met een user interface is C# echt veel makkelijker. En ja dat is het wel waard om je in te verdiepen.C++ kan je daarna nog gaan doen als je echt hele zware apps gaat maken ofzo
quote:dat hoeft niet hoor, je kan ook de .exe uit de projectmap pakken.Op vrijdag 29 oktober 2010 17:51 schreef Green1 het volgende:
[..]
Wat me ook zo irriteerde was, wanneer ik zelfs een simpel hello world maakte. Dat er dan op de één of andere manier een installer bij kwam te zitten, die allerlei zooi eromheen zette. Ik weet de extensies van de bestanden niet meer, maar dat wil ik gewoon niet. Ik wil gewoon een .exe en klaar. Als ik een installer zou willen, dan wil ik dat zelf wel leren, en niet zo'n automatisch voorgekauwd ding..
Maar ik weet niet of dat nu iets van C# is, of van visual studio?
quote:Ik heb hier niet zo veel verstand van, maar is het niet zo dat je de code in de praktijk alsnog moet aanpassen, omdat je een andere compiler nodig hebt?Op donderdag 28 oktober 2010 16:38 schreef netolk het volgende:
Mac en Windows draaien zeker C++, en volgens mij word C++ op de andere bekende besturingssystemen ook ondersteund maar dat weet ik niet helemaal zeker
quote:Lag echt aan jezelf. Verkeerde projecttype waarschijnlijk. Ik krijg gewoon 1 exe en (alleen in debugmode) een PDB.Op vrijdag 29 oktober 2010 17:51 schreef Green1 het volgende:
Wat me ook zo irriteerde was, wanneer ik zelfs een simpel hello world maakte. Dat er dan op de één of andere manier een installer bij kwam te zitten, die allerlei zooi eromheen zette. Ik weet de extensies van de bestanden niet meer, maar dat wil ik gewoon niet. Ik wil gewoon een .exe en klaar. Als ik een installer zou willen, dan wil ik dat zelf wel leren, en niet zo'n automatisch voorgekauwd ding..
Maar ik weet niet of dat nu iets van C# is, of van visual studio?
quote:Een OS 'draait' helemaal geen C++. Het 'draait' een executable, en of het oorspronkelijk C++ was daar heeft het OS geen weet van.Op donderdag 28 oktober 2010 16:38 schreef netolk het volgende:
Mac en Windows draaien zeker C++, en volgens mij word C++ op de andere bekende besturingssystemen ook ondersteund maar dat weet ik niet helemaal zeker
quote:Omdat GUIs in native C++/Win32 maken een hel is, je moet lopen klooien met hwnds en device contexts en weet ik veel, is gewoon ontzettend veel code.
quote:Als het gewoon een console programmatje is hoef je je code niet aan te passen, maak je echter een window ed. dan moet je het wel aanpassen omdat window's bij Windows anders werken dan bijv. bij macOp vrijdag 29 oktober 2010 21:34 schreef minibeer het volgende:
[..]
Ik heb hier niet zo veel verstand van, maar is het niet zo dat je de code in de praktijk alsnog moet aanpassen, omdat je een andere compiler nodig hebt?
quote:Was het maar zo'n feest. Zo'n beetje alle systeemfunctionaliteit werkt in Windhoos anders dan in Linux. En C++ is niet een taal die op dergelijke porteerbaarheid gefocust is.Op zaterdag 30 oktober 2010 11:20 schreef netolk het volgende:
[..]
Als het gewoon een console programmatje is hoef je je code niet aan te passen.
quote:volgens mij is int i = 4; i+= 8; nog steeds i=12 of dit nou op windows of op linux draaitOp zaterdag 30 oktober 2010 11:25 schreef thabit het volgende:
[..]
Was het maar zo'n feest. Zo'n beetje alle systeemfunctionaliteit werkt in Windhoos anders dan in Linux. En C++ is niet een taal die op dergelijke porteerbaarheid gefocust is.
Wat denk je van Java? Voordeel van Java ten opzichte van .NET is dat Java wel op alle platforms draait (als er maar een JVM voor dat platforn is). En je hoeft je niet bezig te houden met dingen als het vrijgeven van geheugen, dat doet Java voor je! In C++ kunnen fouten ontstaan door verkeerd gebruik van pointers, in Java en C# heb je die moeilijkheden niet.quote:Op donderdag 28 oktober 2010 14:11 schreef Green1 het volgende:
Zou C++ iets voor mij zijn om me in te verdiepen? Ik wil gewoon wat simpele tooltjes maken.. En ik wil in de (verre) toekomst ook wat andere talen gaan leren.. Ik heb al eens een boekje over C# gekocht, maar dat ging vooral over visual studio. En dit betrof vooral wat je precies aan moest klikken om visual studio de code voor je te laten maken, en dat vond ik niks. Dus C# als taal viel voor mij af.. ook omdat het, volgens mij, vooral voor windows is..
Maar ik wil dus kleine commandline tooltjes voor linux en windows maken.
Ik heb nog niet echt een concreet idee.. Misschien een backup programma'tje ofzo.
Maar is het verstandig om hiervoor C++ te leren, zodat ik daar later verder mee kan, of kan iemand een andere taal aanraden?
Ik heb vrij veel, al zeg ik het zelf, ervaring met php..
1 2 3 4 5 6 7 8 9 10 | class Program { static void Main() { Func<int, int> func1 = x => x + 1; Console.WriteLine(func1.Invoke(1)); } } |
1 |
quote:Op zaterdag 30 oktober 2010 16:37 schreef whosvegas het volgende:[/b]
[..]
Wat denk je van Java? Voordeel van Java ten opzichte van .NET is dat Java wel op alle platforms draait (als er maar een JVM voor dat platforn is). En je hoeft je niet bezig te houden met dingen als het vrijgeven van geheugen, dat doet Java voor je! In C++ kunnen fouten ontstaan door verkeerd gebruik van pointers, in Java en C# heb je die moeilijkheden niet.
En wat betreft snelheid hoef je C# of Java ook niet te laten, alleen als je zeer kritische applicaties gaat maken, die veel berekeningen moet doen, zal C++ in het voordeel zijn. In het bedrijfsleven, wordt hoofdzakelijk gebruik gemaakt van Java of C#. C++ wordt gebruikt in de wetenschappelijke wereld (samen met Fortran) of om drivers ofzo te maken. Ook in de game wereld wordt nog veel C++ gebruikt. Maar als je voor deze banen in aanmerking wilt komen, ben je zo'n guru, dat je de vraag niet hoeft te stellen.
Dus als je begint met programmeren, vergeet C++ maar. Met C# of Java kun je als beginner meer dan genoeg.
Ja. Maar dit zal wel niet voor alle code gelden.quote:[img]http://i.fokzine.net/templates/forum2009/i/p/1s.gif[/img] Op zaterdag 30 oktober 2010 15:34 schreef netolk het volgende:
[..]
volgens mij is int i = 4; i+= 8; nog steeds i=12 of dit nou op windows of op linux draait
Ja, maar zo makkelijk is het niet, dat weet je zelf ook wel. Afgezien van de standaard libraries is C++ compleet niet platformonafhankelijk.quote:Op zaterdag 30 oktober 2010 15:34 schreef netolk het volgende:
volgens mij is int i = 4; i+= 8; nog steeds i=12 of dit nou op windows of op linux draait
Hij kent "Func" niet, staat er letterlijk. Zorg dat je die .DLL waar deze in zit include in je project en ook de namespace include.quote:Op zaterdag 30 oktober 2010 19:33 schreef minibeer het volgende:
even een kleine c# vraag.
[ code verwijderd ]
>
[ code verwijderd ]
Wat doe ik verkeerd?
er zit allebei een c inquote:Op zaterdag 30 oktober 2010 20:19 schreef Catbert het volgende:
[..]
Ja, maar zo makkelijk is het niet, dat weet je zelf ook wel. Afgezien van de standaard libraries is C++ compleet niet platformonafhankelijk.
[..]
Hij kent "Func" niet, staat er letterlijk. Zorg dat je die .DLL waar deze in zit include in je project en ook de namespace include.
Er is overgeins een .Net topic. C# heeft geen hol met C++ te maken.
C# is .Net, vragen daarover horen gewoon in het .Net topic. In ieder geval niet hier.quote:Op zaterdag 30 oktober 2010 20:28 schreef minibeer het volgende:
er zit allebei een c in
nee ik heb het .net topic niet gezien, maar dit is ook niet echt .net geloof ik, lamba expressies horen gewoon bij c# 3.0
ikkannemnietvindenquote:Op zondag 31 oktober 2010 00:25 schreef Catbert het volgende:
[..]
C# is .Net, vragen daarover horen gewoon in het .Net topic. In ieder geval niet hier.
klopt is idd weg... wel raarquote:Op zondag 31 oktober 2010 00:54 schreef minibeer het volgende:
[..]
ikkannemnietvinden![]()
en ja ik heb al de zoekfunctie gebruikt
Voor kleine commandline tooltjes kun je beter een scripttaal (python is een aanrader) gebruiken. Dat scheelt weer wat compileer gedoe en je hebt betere string manipulatie methoden.quote:Op donderdag 28 oktober 2010 14:11 schreef Green1 het volgende:
Zou C++ iets voor mij zijn om me in te verdiepen? Ik wil gewoon wat simpele tooltjes maken.. En ik wil in de (verre) toekomst ook wat andere talen gaan leren.. Ik heb al eens een boekje over C# gekocht, maar dat ging vooral over visual studio. En dit betrof vooral wat je precies aan moest klikken om visual studio de code voor je te laten maken, en dat vond ik niks. Dus C# als taal viel voor mij af.. ook omdat het, volgens mij, vooral voor windows is..
Maar ik wil dus kleine commandline tooltjes voor linux en windows maken.
Ik heb nog niet echt een concreet idee.. Misschien een backup programma'tje ofzo.
Maar is het verstandig om hiervoor C++ te leren, zodat ik daar later verder mee kan, of kan iemand een andere taal aanraden?
Ik heb vrij veel, al zeg ik het zelf, ervaring met php..
ligt eraan, als je ook wat cpu intensievere taken doet zou ik toch al snel gaan compileren, dan moet je die string methoden zelf maar schrijven als je ze nodig hebtquote:Op zondag 31 oktober 2010 12:27 schreef Wolfje het volgende:
[..]
Voor kleine commandline tooltjes kun je beter een scripttaal (python is een aanrader) gebruiken. Dat scheelt weer wat compileer gedoe en je hebt betere string manipulatie methoden.
Je kan ook Cython gebruiken om Pythoncode te versnellen.quote:Op zondag 31 oktober 2010 14:29 schreef minibeer het volgende:
[..]
ligt eraan, als je ook wat cpu intensievere taken doet zou ik toch al snel gaan compileren, dan moet je die string methoden zelf maar schrijven als je ze nodig hebt
quote:
op 16-bit systemen kon je dacht ik nog in een graphics mode komen door middel van interrupts, maar ik geloof dat dat soort dingen er nu niet meer inzitten, en de console window dus idd alleen voor tekst is (maar ik ben ook niet van alles op de hoogte hoorquote:Op zondag 31 oktober 2010 17:11 schreef netolk het volgende:
in console mode kon je de pixels niet apart aansturen toch? Dan heb je in Windows toch zo'n winapi ding voor nodig?
Tja daar was ik al bang voorquote:Op zondag 31 oktober 2010 18:12 schreef minibeer het volgende:
[..]
op 16-bit systemen kon je dacht ik nog in een graphics mode komen door middel van interrupts, maar ik geloof dat dat soort dingen er nu niet meer inzitten, en de console window dus idd alleen voor tekst is (maar ik ben ook niet van alles op de hoogte hoor)
Is nogal logisch, aangezien de command line puur command line is. Iedereen ziet het als een soort van DOS, maar dat is dus niet zo.quote:Op zondag 31 oktober 2010 18:12 schreef minibeer het volgende:
[..]
op 16-bit systemen kon je dacht ik nog in een graphics mode komen door middel van interrupts, maar ik geloof dat dat soort dingen er nu niet meer inzitten, en de console window dus idd alleen voor tekst is (maar ik ben ook niet van alles op de hoogte hoor)
1 2 3 4 5 6 7 8 9 10 11 | private: int[][] array; public: Test( int, int ); }; Test::Test( int y, int x ) { this -> array = int[y][x]; } |
Die discussie ga je verliezen. Je 'moet' leren datastructuren als vectors e.d. zelf te maken, dat is een onderdeel van je opleiding. Je mag bij dit soort opdrachten nooit collections gebruiken.quote:Op zondag 31 oktober 2010 21:42 schreef FastFox91 het volgende:
Persoonlijk wil ik ook liever vectoren gebruiken, maar de opdracht wenst dat er een array gebruikt wordt. Morgen toch maar even discussiëren met mijn docent.
1 2 3 4 | { int x,y,waarde; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | { private: int* data; unsigned int width; unsigned int height; public: unsigned int getWidth() const {return width;} unsigned int getHeight() const {return height;} Matrix(unsigned int width, unsigned int height) : width(width), height(height) {data = new int[width * height];} ~Matrix() {delete[] data;} int& get(unsigned int x, unsigned int y) {/* todo: check bounds */ return data[x + y * width];} void copyTo(Matrix& pMatrix) {/* for-next loops to copy data */} }; class VariableMatrix { private: Matrix* MyMatrix; public: VariableMatrix() : MyMatrix(0) {} ~VariableMatrix() {delete MyMatrix;} Get(unsigned int x, unsigned int y) {/*check for zero*/ return MyMatrix.Get(x,y);} Set(unsigned int x, unsigned int y) { if (MyMatrix == 0 || x >= MyMatrix.GetWidth() || y >= MyMatrix.GetHeight()) { Matrix* NewMatrix = new Matrix(x+1, y+1); if (MyMatrix) { MyMatrix.copyTo(NewMatrix); delete MyMatrix; MyMatrix = NewMatrix; } } } }; Let niet op m'n vreselijke stijl en alle fouten. want ik gebruik nu m'n persoonlijke- en werk-stijl doorelkaar. |
Klinkt als een enorme teringzooi, maargoed. Als je een 2D array nodig hebt, moet je niet opeens met rare zaken gaan klooien.quote:Op dinsdag 2 november 2010 11:41 schreef Cruise.Elroy het volgende:
Ik zou er een linked list van matrices van maken denk ik. Krijg je echt enorm leuke code, en nog efficient in geheugengebruik ook. (alleen niet heel snel)
Rare zaken?quote:Op dinsdag 2 november 2010 11:44 schreef Catbert het volgende:
[..]
Klinkt als een enorme teringzooi, maargoed. Als je een 2D array nodig hebt, moet je niet opeens met rare zaken gaan klooien.
Hoe maak je zo'n linked list dan?quote:Op dinsdag 2 november 2010 11:53 schreef Cruise.Elroy het volgende:
[..]
Rare zaken?
Ik zou wss apart verticaal en horizontaal resizen afhandelen, en elk nieuw blok erbij in een linked list zetten. Elk blok kan je dan indexen als elke statische 2D array
Dat bedoel ik dus...quote:
Je hoeft mij niet te vertellen wat een linked list is. Het punt is dat hij voor z'n opleiding C++ aan het leren is, en net met arrays begint. Dan zou je moeten snappen dat hij A) de opdracht uit moet voeren zoals beschreven en B) we het niet onnodig complex moeten maken.quote:Op donderdag 4 november 2010 07:54 schreef Cruise.Elroy het volgende:
Oh kom op, een LL is naast een standaard array wel de meest basic manier van data opslaan.
http://en.wikipedia.org/wiki/Linked_list
Het is wat lastig practicumopdrachten uit te voeren als je geen taalen kent waarin je dat uitvoeren kunt doen. Je kunt zoveel theorie leren, maar een DSW tree kunnen implementeren zul je toch echt gewoon een keer moeten doen om 't te snappen.quote:Op donderdag 4 november 2010 10:14 schreef thabit het volgende:
Ik vind het wel raar hoor, dat mensen eerst met programmeertalen beginnen en daarna pas met algoritmen en datastructuren. Andersom zou beter zijn.
Nee, C++ is gewoon saai.quote:Op donderdag 4 november 2010 10:45 schreef FastFox91 het volgende:
Praten jullie nog steeds over dat probleempje van mij?
Heeft C++ geen interessantere, van hoger niveau, onderwerpen waarover te discussiëren valt?
Ow heet dat zo XDquote:Op donderdag 4 november 2010 07:54 schreef Cruise.Elroy het volgende:
Oh kom op, een LL is naast een standaard array wel de meest basic manier van data opslaan.
http://en.wikipedia.org/wiki/Linked_list
Ik heb nog wat lopen spitten, en het lijkt dat er minstens 4 bytes verloren lijken te gaan, iig 3 jaar geleden nog welquote:tried spelunking in STL code that comes with VS2008 SP1 (a.k.a. VC9).
Considering debug builds as per your request, I came to the following conclusions:
In both cases of iterator debugging feature (i.e. _HAS_ITERATOR_DEBUGGING) being enabled or disabled:
1. vector has 3 data members, all pointers. In 32-bit systems, each pointer is 4 bytes, so they occupy 3*4 = 12 bytes.
2. vector is derived from _Vector_val class. This class has an _Alval data member, which is 1 byte big.
However, for alignment reasons, the size cost is rounded to 4 bytes.
So, you have 12 bytes (from 3 vector's pointers) + 4 bytes (from _Vector_val::_Alval) = 16 bytes subtotal.
Now, let's go to sub-cases of iterator debugging feature enabled or disabled.
If iterator debugging feature is enabled:
3a. _Vector_val derives from _Container_base_secure. _Container_base_secure has a data member _Myfirstiter, which is a pointer, so add 4 bytes.
The total becomes: 16 + 4 = 20 bytes (as per your finding).
If iterator debugging feature is disabled:
3b. _Vector_val derives from _Container_base_aux_alloc_real. _Container_base_aux_alloc_real has one data member. Its size is 1 byte, but for alignment reasons rounds up to 4 bytes.
4b. _Container_base_aux_alloc_real derives from _Container_base_aux. _Container_base_aux has one data member _Myownedaux, which is a pointer; so: add 4 bytes.
In this case the total becomes: 16 + 4 + 4 = 24 bytes (as per your finding).
You may want to try this simple C++ program I wrote to try to better understand the total size of STL vector.
Je mag van STL verwachten dat een lege container geen heap gaat aanspreken.quote:Op dinsdag 9 november 2010 14:00 schreef thabit het volgende:
sizeof laat natuurlijk alleen de ruimte zien die het object zelf inneemt, niet de extra geheugenruimte die het reserveert.
Das best wel slecht... wel grappig iddquote:Op dinsdag 9 november 2010 14:04 schreef Cruise.Elroy het volgende:
[..]
Je mag van STL verwachten dat een lege container geen heap gaat aanspreken.
Grappig genoeg gebeurt dit wel op de PS3 of X360 (weet niet meer welke)
Het levert echt vreselijke bugs op als je multi-platform en met heap management werkt.quote:Op dinsdag 9 november 2010 14:52 schreef netolk het volgende:
[..]
Das best wel slecht... wel grappig idd
Hèhè ja dat bedoel ik ja... oké dus als je maar 1 functie nodig hebt kun je die beter apart in een cpp file zetten en die compilen +linken?quote:Op woensdag 24 november 2010 15:34 schreef Catbert het volgende:
Je compiler? Je linker bedoel je. Als je statisch linked wordt alles meegenomen.
Ja maar dat klinkt al moeilijk XDquote:
Je kan de libraries vast wel in een DLL stoppen, maar het beste antwoord op zulke vragen blijft nog altijd: RTFM.quote:Op woensdag 24 november 2010 18:18 schreef netolk het volgende:
[..]
Ja maar dat klinkt al moeilijk XD
ik gebruik minGW kan die dat überhaupt wel?
Hij heeft het volgens mij over compile-tijden. Dan maakt het niet uit of je statisch of dynamisch linkt, de libraries zelf zijn natuurlijk al gecompileerd.quote:Op donderdag 25 november 2010 10:31 schreef Catbert het volgende:
Bovendien, wat boeit het dat je executable wat groter wordt?
Normaal hercompile je alleen de code die gewijzigd is. Als je voor elke build alles opnieuw compiled doe je sowieso iets niet goed.quote:Op donderdag 25 november 2010 11:16 schreef Cruise.Elroy het volgende:
Hij heeft het volgens mij over compile-tijden. Dan maakt het niet uit of je statisch of dynamisch linkt, de libraries zelf zijn natuurlijk al gecompileerd.
Linken is in mijn ervaring vaak een traag onderdeel omdat je het moeilijk distributed kan doen (iaw, er zijn weinig pakketten die dat ondersteunen) tenzij ik moduleinterfaces ga veranderen is linken snel 50% van de buildtijd.quote:Op donderdag 25 november 2010 11:19 schreef Catbert het volgende:
[..]
Normaal hercompile je alleen de code die gewijzigd is. Als je voor elke build alles opnieuw compiled doe je sowieso iets niet goed.
Daarnaast gaf 'ie na mijn reactie aan dat het om het linken ging, en linken gaat sowieso heel snel.
Dat terwijl dat hele gebeuren van headers includen, compilen en linken bedoeld was om het snel te laten werken. In deze tijd van snelle processoren en parallellisatie vertraagt het de boel alleen maar. Een soort QWERTY-achtige taferelen dus.quote:Op donderdag 25 november 2010 13:46 schreef Cruise.Elroy het volgende:
[..]
Linken is in mijn ervaring vaak een traag onderdeel omdat je het moeilijk distributed kan doen (iaw, er zijn weinig pakketten die dat ondersteunen) tenzij ik moduleinterfaces ga veranderen is linken snel 50% van de buildtijd.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include "Error.h" #include "Game.h" #include <iostream> #include <Windows.h> int main(){ srand(unsigned(time(0))); rand(); // voorkomt dat het 1e getal altijd hetzelfde is try{ // het stuk waar Game gebruikt kan worden Game myGame("01.lvl","01.opt"); //myGame.run(); // gameloop } catch(Error e){ std::cerr << e._DATA << '\n'; } std::cout << "?\n"; return 0; } |
Sorry vergeten er bij te zetten maar dat is een const char* waar ik dan een string in stop, maar er word dus geen throw Error gedaan...quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Game::Game(const char* lvlfile,const char* optfile){ // load from file /* _OPTIONS = Options(optfile); */ std::ifstream Read(lvlfile,std::ios::binary); if(Read.is_open()){ BitField::I16 rI16; BitField::I32 rI32; try{ // read data from file } catch(std::ios_base::failure){ Read.close(); throw Error("File Corrupted"); } Read.close(); } else throw Error("Can't open Lvl File"); } |
Heb ik dus gedaan en alles word tot en met onder aan de try uit gevoerd en de catch word niet aangeroepen, wat wel zou moeten aangezien het bestand minder data bevat dan ik probeer te lezen dus zou er een ios_base::failure moeten zijn maar die word dus niet ge-trowed...quote:Op vrijdag 26 november 2010 19:29 schreef thabit het volgende:
Misschien moet je wat couts in je code plaatsen ter debugging (wel met endl eindigen anders komen ze misschien niet op het scherm). Zo kun je zien wat er waar gebeurt.
Tuurlijk maar dat is dus redelijk lang...quote:Op vrijdag 26 november 2010 21:04 schreef thabit het volgende:
Kun je de code posten die de file inleest?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #include "Game.h" #include "Error.h" #include "BitField.h" #include <fstream> Game::Game(const char* lvlfile,const char* optfile){ // load from file /* _OPTIONS = Options(optfile); */ std::ifstream Read(lvlfile,std::ios::binary); if(Read.is_open()){ BitField::I16 rI16; BitField::I32 rI32; try{ /* Lvl Data */ /* get demensions of lvl */ rI16.c0 = Read.get(); rI16.c1 = Read.get(); unsigned short _X = *(unsigned short*)(&rI16); rI16.c0 = Read.get(); rI16.c1 = Read.get(); unsigned short _Y = *(unsigned short*)(&rI16); /* allocate lvl space */ Piece data[_X*_Y]; /* get lvl data */ for(unsigned short y=0; y < _Y; y++){ for(unsigned short x=0; x < _X; x++){ data[y*_X+x].set_Fertile(Read.get()); // evt. de bools van Piece in 1 byte opslaan data[y*_X+x].set_Used(Read.get()); } } _LEVEL = Level(_X,_Y,data); /* Atmosphere Data */ /* CO2 */ rI32.c0 = Read.get(); rI32.c1 = Read.get(); rI32.c2 = Read.get(); rI32.c3 = Read.get(); _ATMOSPHERE.set_CO2(*(unsigned short*)(&rI32)); /* O2 */ rI32.c0 = Read.get(); rI32.c1 = Read.get(); rI32.c2 = Read.get(); rI32.c3 = Read.get(); _ATMOSPHERE.set_O2(*(unsigned short*)(&rI32)); /* H2O */ rI32.c0 = Read.get(); rI32.c1 = Read.get(); rI32.c2 = Read.get(); rI32.c3 = Read.get(); _ATMOSPHERE.set_H2O(*(unsigned short*)(&rI32)); /* N2 */ rI32.c0 = Read.get(); rI32.c1 = Read.get(); rI32.c2 = Read.get(); rI32.c3 = Read.get(); _ATMOSPHERE.set_N2(*(unsigned short*)(&rI32)); /* NOx */ rI32.c0 = Read.get(); rI32.c1 = Read.get(); rI32.c2 = Read.get(); rI32.c3 = Read.get(); _ATMOSPHERE.set_NOX(*(unsigned short*)(&rI32)); /* O3 */ rI32.c0 = Read.get(); rI32.c1 = Read.get(); rI32.c2 = Read.get(); rI32.c3 = Read.get(); _ATMOSPHERE.set_O3(*(unsigned short*)(&rI32)); /* Player */ rI16.c0 = Read.get(); rI16.c1 = Read.get(); unsigned short x = *(unsigned short*)(&rI16); rI16.c0 = Read.get(); rI16.c1 = Read.get(); unsigned short y = *(unsigned short*)(&rI16); _PLAYER = Player(x,y); } catch(std::ios_base::failure){ Read.close(); throw Error("File Corrupted"); } Read.close(); } else throw Error("Can't open Lvl File"); } |
Ja ik weet het maar omdat het binair is, gebruik ik bitfields om naar unsigned short te kunnen casten... hoe kan je zoiets dan compacter opschrijven??quote:Op vrijdag 26 november 2010 21:33 schreef thabit het volgende:
Tjezus wat een hoop code voor zo'n simpele handeling. Zoiets moet je echt compacter proberen te schrijven, zonder alles tig keer te herhalen. Verder kan ik niet direct zien wat er fout is. Zou natuurlijk ook in dingen als Level, Player en BitField of zo kunnen zitten. Kun je dat ook misschien posten?
1 2 3 4 5 6 7 8 9 10 11 12 | namespace BitField{ struct I16{ unsigned char c0:8; unsigned char c1:8; }; struct I32{ unsigned char c0:8; unsigned char c1:8; unsigned char c2:8; unsigned char c3:8; }; }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class Player{ unsigned short _X,_Y; // location left upper corner of screen bool _GAMEOVER; /* Buildings */ StockHouse _myStockHouse; std::vector<SawMill> _mySawMill; std::vector<Quarry> _myQuarry; public: Player(); Player(unsigned short x,unsigned short y); ~Player(){} bool Is_GameOver(){return _GAMEOVER;} unsigned short get_X(){return _X;} unsigned short get_Y(){return _Y;} void Build(unsigned short x,unsigned short y); void Draw(); //Graphics.cpp }; Player::Player(unsigned short x,unsigned short y):_X(x),_Y(y){ _myStockHouse.set_Building(_X+16,_Y+9,0,1); // staat in midden van beeld 16:9 verhouding _mySawMill.clear(); _myQuarry.clear(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Level{ unsigned short _X,_Y; // map demensions Piece *_DATA; public: Level():_X(0),_Y(0),_DATA(0){} Level(unsigned short x,unsigned short y,Piece *data):_X(x),_Y(y),_DATA(data){} ~Level(){delete[] _DATA; _DATA = 0;} unsigned short get_X(){return _X;} unsigned short get_Y(){return _Y;} Piece& operator()(unsigned short x,unsigned short y); Piece operator()(unsigned short x,unsigned short y) const; }; |
Ow hèhè dat klinkt idd wel logisch, helemaal vergeten dat ik dat aangepast had zonder te kijken of het wel kon...quote:Op vrijdag 26 november 2010 22:58 schreef thabit het volgende:
Level is niet goed, je initialiseert een pointer die naar een array verwijst die je na het verlaten van de constructor van Game weggooit. Kortom, die informatie ben je dan gewoon kwijt. Daarbij wordt er in de destructor van Level ook nog een array gedeletet die niet met new is aangemaakt, naar een weggegooide datastructuur verwijst en dus volkomen ongedefineerd is. Ik denk dat het programma wel eens vast zou kunnen lopen bij het uitvoeren van deze destructor.
1 2 3 4 | Piece *data; data = new Piece[_X*_Y]; _LEVEL = Level(_X,_Y,&data); |
Je kan bijvoorbeeld een aparte functie schrijven die als input een fstream& heeft en als output een unsigned short, en ook eentje voor een unsigned long.quote:Op vrijdag 26 november 2010 22:40 schreef netolk het volgende:
[..]
Ja ik weet het maar omdat het binair is, gebruik ik bitfields om naar unsigned short te kunnen casten... hoe kan je zoiets dan compacter opschrijven??
Maar krijg je dan niet dat je progje het bestand opent,sluit,opent,sluit ect?quote:Op vrijdag 26 november 2010 23:15 schreef thabit het volgende:
[..]
Je kan bijvoorbeeld een aparte functie schrijven die als input een fstream& heeft en als output een unsigned short, en ook eentje voor een unsigned long.
Lijkt me een foutgevoelige oplossing. Ik zou _DATA gewoon als vector<Piece> definieren en geen array Piece data[nogwat] in Game::Game aanmaken (sowieso moet je geen arrays op de stack aanmaken, kun je stack overflows van krijgen), maar ook gewoon als vector definieren (of direct _LEVEL._DATA aanspreken, gaat sneller).quote:Op vrijdag 26 november 2010 23:07 schreef netolk het volgende:
[..]
Ow hèhè dat klinkt idd wel logisch, helemaal vergeten dat ik dat aangepast had zonder te kijken of het wel kon...
kan ik het dan zo oplossen?
[ code verwijderd ]
Want ik kan data niet deleten omdat _DATA (uit level) het zelfde gebruikt toch?
Nee, je kan dat ding toch geopend houden tot hem niet meer nodig hebt. Die functie die die informatie inleest moet natuurlijk zelf geen bestanden openen en sluiten.quote:Op vrijdag 26 november 2010 23:19 schreef netolk het volgende:
[..]
Maar krijg je dan niet dat je progje het bestand opent,sluit,opent,sluit ect?
Als er in de header file alleen iets staat alsquote:Op zaterdag 27 november 2010 20:11 schreef minibeer het volgende:
Hoi, ik ben nu een programma (ContextFree heet het, ik ben de commandline aan het debuggen) geschreven in C++ aan het debuggen, omdat hij een 'gdi+ error' gaf (een invalid parameter om precies te zijn). Ik weet dat het programma wel werkt op mijn andere computer, met win vista (hij werkt niet op windows 7). Ik weet nu vrij zeker dat de error in een bepaalde functie voorkomt. Deze functie is gedefinieerd in een header file, maar als ik de header file vervang heeft dit volgens mij weinig zin, omdat de functie zelf zich in een andere file bevindt (toch?). Ik vroeg me af hoe je kan weten in welke file deze functie dan wel zit.
1 | void function(int par,char* string); |
1 2 3 | void function(int par,char* string){ // code die iets met de parameters doet } |
Bedankt man nu is mn code even een stukje overzichtelijkerquote:Op vrijdag 26 november 2010 23:26 schreef thabit het volgende:
[..]
Nee, je kan dat ding toch geopend houden tot hem niet meer nodig hebt. Die functie die die informatie inleest moet natuurlijk zelf geen bestanden openen en sluiten.
Beh ik snap er niks van. De maker heeft gereageerd met dit:quote:Op maandag 29 november 2010 11:26 schreef netolk het volgende:
[..]
Als er in de header file alleen iets staat als
[ code verwijderd ]
dan word de functie in een ander bestand gedefiniëerd. dan moet je op zoek naar iets als dit:
[ code verwijderd ]
Ow enne die int par, char* string zijn voorbeeld parameters ze kunnen van alles zijn
Heh, ik snap het. Ergens werd een functie aangeroepen op deze manier:quote:Op zondag 28 november 2010 10:40 schreef MtnViewJohn het volgende:
...
The GDI+ png file encoder does not take any encoder parameters. So I was building an encoder parameter structure with zero parameters. This worked fine until Windows 7. With Windows 7 the png encoder fails if you provide an encoder list, even if it has zero elements. Instead you must pass a NULL pointer.
1 2 3 | EncoderParameters encoderParameters; encoderParameters.Count = 0; Status s = saveBM->Save(wpath, &encClsid, &encoderParameters); |
1 | Status s = saveBM->Save(wpath, &encClsid, NULL); |
De code mist libs ofzo, maar bij compileert het niet zo 1, 2, 3quote:Op dinsdag 21 december 2010 11:35 schreef Flaccid het volgende:
Ik weet niet hoe moeilijk het is, maar is er iemand die voor mij de source can compilen zodat ik de software zonder al te veel moeite kan gebruiken? Ben bezig met een project waar we van een houten picnictafel een interactieve willen maken, en tracking is dan best relaxt
http://sites.google.com/site/tarandeep/fingermouse
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <iostream> struct Data{ unsigned short i; Data():i(8){} ~Data(){i=0;} }; int main(){ Data myData; Data *ptr; ptr = &myData; std::cout << "myData: " << myData.i << '\n'; std::cout << "ptr: " << ptr->i << '\n'; ptr->~Data(); std::cout << "myData: " << myData.i << '\n'; std::cout << "ptr: " << ptr->i << '\n'; return 0; } |
ok, is er een manier om hem te verwijderen zonder met scopes te hoeven werken?quote:Op zondag 2 januari 2011 18:26 schreef thabit het volgende:
Het enige wat die destructor doet is myData.i op 0 zetten, verder bestaat myData nog wel gewoon.
myData op de heap aanmaken ipv. op de stack?quote:Op zondag 2 januari 2011 19:01 schreef netolk het volgende:
[..]
ok, is er een manier om hem te verwijderen zonder met scopes te hoeven werken?
Ja, dat zou idd kunnen want dan kan ik hem gewoon opruimen met delete toch?quote:Op zondag 2 januari 2011 19:16 schreef TeringHenkie het volgende:
[..]
myData op de heap aanmaken ipv. op de stack?
Mits je hem aanmaakt met new. De destructor die je daar hebt is trouwens vrij zinloos: je zet iets op 0 wat je daarna toch weggooit.quote:Op zondag 2 januari 2011 20:16 schreef netolk het volgende:
[..]
Ja, dat zou idd kunnen want dan kan ik hem gewoon opruimen met delete toch?
Ik weet dat de destructor hier zinloos is, dacht in eerste instantie dat ie dan weggegooid werd bij het aanroepen van de destructor maar dat is dus niet zo...quote:Op zondag 2 januari 2011 20:27 schreef thabit het volgende:
[..]
Mits je hem aanmaakt met new. De destructor die je daar hebt is trouwens vrij zinloos: je zet iets op 0 wat je daarna toch weggooit.
Ik weet dat het kan, je hebt programma's die het gehele geheugen dat gebruikt word door een programma kunnen lezen/wijzigen weet alleen niet of het met een HWND kanquote:Op zondag 2 januari 2011 21:30 schreef FastFox91 het volgende:
Met windows.h heb ik een HWND van een andere applicatie. De applicatie heeft een tabel die ik wil uitlezen en gebruiken. Is dat mogelijk (met HWND) of ergens anders mee? Ben nog niet zo lang bezig met c++ en ik heb een aanwijzing nodig naar de goede richting.
Ik denk dat hij die HWND verkrijgt uit een .dll-etje ofzo, FastFox91 moet even wat specifieker zijnquote:Op zondag 2 januari 2011 21:31 schreef netolk het volgende:
[..]
Ik weet dat het kan, je hebt programma's die het gehele geheugen dat gebruikt word door een programma kunnen lezen/wijzigen weet alleen niet of het met een HWND kan
Je kan het bij aanvang van het programma op de heap declareren.quote:Op zondag 2 januari 2011 21:28 schreef netolk het volgende:
[..]
Ik weet dat de destructor hier zinloos is, dacht in eerste instantie dat ie dan weggegooid werd bij het aanroepen van de destructor maar dat is dus niet zo...
Hoe kan je anders iets op de heap zetten dan?
1 | HWND venster = FindWindow( "venster", NULL); |
Oe dat klinkt interessant vertel!quote:Op zondag 2 januari 2011 21:45 schreef thabit het volgende:
[..]
Je kan het bij aanvang van het programma op de heap declareren.
Shared objects/shared memory is denk ik de term die het meeste raakte met wat jij wil.quote:Op zondag 2 januari 2011 21:46 schreef FastFox91 het volgende:
@TeringHenkie Simpel, of bedoel je dit niet?
[ code verwijderd ]
netolk, dat is goed nieuws.Heb nou "Window Detective" gevonden. Gelukkig opensource, dus misschien kan ik daar wat van leren, maar denk dat dat nog te moeilijk voor mij is.
Gewoonquote:Op zondag 2 januari 2011 22:43 schreef netolk het volgende:
[..]
Oe dat klinkt interessant vertel!
Kan ik het dan ook via een pointer verwijderen van de heap?
1 2 3 4 5 6 | Bla *schaap = new Bla(); delete schaap; // EN ALTIJD: schaap = 0; |
joh, alleen werd er gesuggereerd dat het ook zonder new kan...quote:
quote:Op maandag 3 januari 2011 13:37 schreef netolk het volgende:
[..]
joh, alleen werd er gesuggereerd dat het ook zonder new kan...
ten 2e kan je dit niet verwijderen via een pointer...
1 2 3 4 5 6 7 | class PietjePuk { ... }; PietjePuk a, b(123, 456), c(a); int main() { ... } |
Hmm.. tja dat is ook niet echt een oplossing... het gaat om aardig wat objecten die in runtime gemaakt moeten kunnen worden... maar misschien kan ik het met een scope wel maken...quote:Op maandag 3 januari 2011 14:57 schreef thabit het volgende:
Zoiets:
[ code verwijderd ]
Ik zou dit overigens niet met de hand destructen, de destructors worden automatisch aangeroepen bij het afsluiten van het programmen.
1 2 3 4 5 6 7 8 9 10 | class Data{ //blabla }; int main(){ { Data myData(); // doe dingen met data } // dan bestaat myData hier niet meer toch? } |
Yep, alles daarbinnen wordt van de stack geflikkerd na de sluitende haken.quote:Op maandag 3 januari 2011 18:03 schreef netolk het volgende:
[..]
Hmm.. tja dat is ook niet echt een oplossing... het gaat om aardig wat objecten die in runtime gemaakt moeten kunnen worden... maar misschien kan ik het met een scope wel maken...
[ code verwijderd ]
Het klopt dat myData alleen maar in de binnenste scope (waar het gemaakt word) bestaat toch?
maarja dit is niet zo netjes kan dit ook beter?
Maar kan dit ook netter?quote:Op maandag 3 januari 2011 18:05 schreef TeringHenkie het volgende:
[..]
Yep, alles daarbinnen wordt van de stack geflikkerd na de sluitende haken.
Ik heb iets bedacht als ik die data dingen nu eens gewoon in een vector oid zet en zo nu en dan kijk of ze weg kunnen, is dat iets wat redelijk efficiënt is of word het dan gewoon zo'n chaos?quote:Op maandag 3 januari 2011 18:06 schreef netolk het volgende:
[..]
Maar kan dit ook netter?
Het liefst op elk moment van je stack te gooien via een pointer oid.
weg uit dit topic!quote:Op dinsdag 4 januari 2011 18:25 schreef thabit het volgende:
Een andere optie is om geen C++ te gebruiken, maar een taal met ingebouwde garbage collection en op die manier jezelf in de 21ste eeuw te verwelkomen.
Hehe zo oud ben ik nou ook weer niet hoor...quote:Op dinsdag 4 januari 2011 20:43 schreef minibeer het volgende:
[..]
weg uit dit topic!
de jeugd van tegenwoordig... geen respect meer voor mensen van de oude stempel
Ik onderschrijf dit.quote:Op dinsdag 4 januari 2011 18:25 schreef thabit het volgende:
Een andere optie is om geen C++ te gebruiken, maar een taal met ingebouwde garbage collection en op die manier jezelf in de 21ste eeuw te verwelkomen.
Ja? Dus dit is 1337?quote:
1 | std::map<std::string, std::vector<std::pair<double, std::string> > > list; |
Want in C# kun je nietquote:Op woensdag 5 januari 2011 11:36 schreef Thomass het volgende:
[..]
Ja? Dus dit is 1337?Het is eerder troep
[ code verwijderd ]
1 | System.Collections.Generic.Dictionary<System.String, System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<double, System.String>>> list |
Dat bedoelde ik niet nee. Ik ken C# niet, het ziet er in ieder geval afschuwelijk uitquote:Op woensdag 5 januari 2011 11:44 schreef _Led_ het volgende:
[..]
Want in C# kun je niet
[ code verwijderd ]
schrijven bedoel je ?
Preciesquote:Op woensdag 5 januari 2011 12:56 schreef thabit het volgende:
Dit is natuurlijk een stuk beter:
[ code verwijderd ]
Och, die regel kun je ook een heel stuk compacter schrijven hoor, net zoals dat stuk C++ trouwens.quote:Op woensdag 5 januari 2011 13:38 schreef Thomass het volgende:
Dat bedoelde ik niet nee. Ik ken C# niet, het ziet er in ieder geval afschuwelijk uit
Ja lelijke code willen we natuurlijk niet hebben hèquote:Op woensdag 5 januari 2011 13:40 schreef _Led_ het volgende:
[..]
Och, die regel kun je ook een heel stuk compacter schrijven hoor, net zoals dat stuk C++ trouwens.
Als je wilt kun je in elke taal lelijke code schrijven
Totdat de stack vol zit, daarna krijg je een segfault.quote:Op donderdag 6 januari 2011 00:25 schreef TeringHenkie het volgende:
On-topic, er ging voor mij een hele wereld open toen ik er achter kwam dat je objecten gewoon op de stack aan kan maken ipv. alleen maar op de heap. Hoe ver kun je daar mee gaan?
Dus kleine objecten op de stack, grote op de heap zodat die niet gefragmenteerd raakt?quote:Op donderdag 6 januari 2011 10:00 schreef thabit het volgende:
[..]
Totdat de stack vol zit, daarna krijg je een segfault.. Hangt dus van je stackruimte af en van de grootte van de objecten. Het lijkt me sowieso raadzaam om zuinig om te gaan met stackruimte in het algemeen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | enum Name{ sub1,sub2 }; class Master{ protected: Name _NAME; }; class Sub1:public Master{ _NAME = sub1; }; class Sub2:public Master{ _NAME = sub2; }; |
Je zou bijvoorbeeld een memberconstante aan kunnen maken die je bij de een initialiseerd op een andere waarde dan bij de ander. Maar ik geloof dat er betere oplossingen zijn, al weet ik niet precies welke (in c# had je typeof(), maar ik geloof niet dat er zoiets is in c++)quote:Op vrijdag 7 januari 2011 14:52 schreef netolk het volgende:
Hey, zou deze code anders kunnen?
[ code verwijderd ]
Ik wil deze classes in een vector<Master> stoppen, maar dan wil ik wel weten wat voor class (sub1,sub2) het is.
Is daar een andere oplossing voor dan een enum?
Die member constante komt dan toch ongeveer overeen met de oplossing die ik had bedacht?quote:Op zaterdag 8 januari 2011 14:17 schreef minibeer het volgende:
[..]
Je zou bijvoorbeeld een memberconstante aan kunnen maken die je bij de een initialiseerd op een andere waarde dan bij de ander. Maar ik geloof dat er betere oplossingen zijn, al weet ik niet precies welke (in c# had je typeof(), maar ik geloof niet dat er zoiets is in c++)
o, had ik niet gezienquote:Op zaterdag 8 januari 2011 21:43 schreef netolk het volgende:
[..]
Die member constante komt dan toch ongeveer overeen met de oplossing die ik had bedacht?
Je kunt met een dynamic_cast checken of een een pointer naar een base class naar een gegeven afgeleide klasse verwijst. Zie http://en.wikibooks.org/wiki/C++_Programming/RTTIquote:Op vrijdag 7 januari 2011 14:52 schreef netolk het volgende:
Hey, zou deze code anders kunnen?
[ code verwijderd ]
Ik wil deze classes in een vector<Master> stoppen, maar dan wil ik wel weten wat voor class (sub1,sub2) het is.
Is daar een andere oplossing voor dan een enum?
Zo'n dynamic cast kost zeker wel weer veel resources of niet?quote:Op zondag 9 januari 2011 19:19 schreef thabit het volgende:
[..]
Je kunt met een dynamic_cast checken of een een pointer naar een base class naar een gegeven afgeleide klasse verwijst. Zie http://en.wikibooks.org/wiki/C++_Programming/RTTI
Valt wel mee denk ik, volgens mij bepaalt hij de validiteit van de cast aan de hand van de vtable.quote:Op zondag 9 januari 2011 21:39 schreef netolk het volgende:
[..]
Zo'n dynamic cast kost zeker wel weer veel resources of niet?
Ow ok, het ziet er wel handiger uit dan zo'n member te maken waar je aan kunt zien wat het isquote:Op zondag 9 januari 2011 21:45 schreef thabit het volgende:
[..]
Valt wel mee denk ik, volgens mij bepaalt hij de validiteit van de cast aan de hand van de vtable.
Maar hoe doe je zo iets dan?quote:Op zondag 9 januari 2011 22:07 schreef thabit het volgende:
Je kunt bijvoorbeeld ook een virtual method is_Sub1 aanmaken, die false returnt in de base class en true in Sub1. Lijkt me wat schoner dan met rtti kloten.
1 2 3 4 5 6 7 8 | class Base { public: virtual bool is_Sub1() const {return false;} }; class Sub1: public Base { bool is_Sub1() const {return true;} }; |
Ja, waarschijnlijk is het het best om met templates te werken enzo maar dat moet ik dan weer opzoeken hoe dat werkt en dit snap ik teminste redelijk...quote:Op maandag 10 januari 2011 15:16 schreef thabit het volgende:
Die const kun je ook weglaten. Is alleen om de compiler te vertellen dat de methode niet aan de members van de klasse loopt te frunniken.
Ik denk persoonlijk echter, dat als je een klasse hebt met 7 subklassen waarvoor je type-identificatie nodig hebt, dat dan zeer waarschijnlijk je design voor verbetering vatbaar is.
Ja dat had ik dus eerst maar toen vroeg ik of het beter kon en kwam er dus die rtti dingen voorquote:Op maandag 10 januari 2011 19:11 schreef TeringHenkie het volgende:
Je kan toch ook een pure virtual method maken in je base class die een waarde uit een enum typeofsubclass oid. returnet? Of denk ik nu te simpel?
1 2 3 4 5 6 7 8 9 | #ifndef _HEADERA_H #define _HEADERA_H #include "HeaderB.h" namespace A{ class A_Class{ B::B_Class _DINGES; }; }; #endif |
1 2 3 4 5 6 7 8 9 | #ifndef _HEADERB_H #define _HEADERB_H #include "HeaderA.h" namespace B{ class B_Class{ A::A_Class *_BLA; }; }; #endif |
Ja die pointer heb ik... maar hoe kan ik een forward declaratie doen als het in een namespace staat?quote:Op woensdag 12 januari 2011 18:02 schreef thabit het volgende:
Je declareert in A_Class een member van type B_Class, terwijl het mogelijk is dat B_Class op dat moment nog niet gedefinieerd is. De compiler moet weten hoeveel geheugenruimte een object van een class en daarmee dus ook elke member van die class inneemt.
Als je dus dergelijke cross-references wilt toepassen dan moet je dat dus doen middels een pointer of een reference, daarvan ligt namelijk de hoeveelheid geheugenruimte gewoon vast. Je moet dan nog wel forward declaraties class A_class; en class B_class; invoegen.
1 2 3 | namespace A { class A_Class; } |
_Dinges moet natuurlijk wel een pointer of een reference zijn, zoals ik een paar posts terug heb uitgelegd.quote:Op woensdag 12 januari 2011 19:02 schreef netolk het volgende:
nee, dan krijg ik een error in header A, dat _DINGES een incomplete type is
Ow hehe, vet stom vergeten het bestand op te slaan ofzo want nu doet ie het dus welquote:Op donderdag 13 januari 2011 11:22 schreef thabit het volgende:
[..]
_Dinges moet natuurlijk wel een pointer of een reference zijn, zoals ik een paar posts terug heb uitgelegd.
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 | inline void file::write_part(segment *the_segment, ::nntp::decoded_article_ptr decoded) { boost::mutex::scoped_lock lock(write_mutex); // make sure we are the only ones messing with segments std::string filename; // cache file name std::string data; // cache decoded data // get the filename and data from the decoded article decoded->filename(filename, false); decoded->data(data); // open file out_file.open(filename.c_str(), std::ios_base::binary | std::ios_base::out); // if it is a multipart binary, seek to the right position if (decoded->multipart()) out_file.seekp(decoded->begin() - 1); // did we arrive at the right position? if (decoded->multipart() && out_file.tellp() != decoded->begin() - 1) std::cout << "File '" << filename << "', segment " << the_segment->segment_number() << " at position " << out_file.tellp() << ", expected to be at " << decoded->begin() - 1 << std::endl; // write the data out_file.write(data.c_str(), data.length()); // close the file out_file.close(); } |
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 | inline void file::write_part(segment *the_segment, ::nntp::decoded_article_ptr decoded) { boost::mutex::scoped_lock lock(write_mutex); // make sure we are the only ones messing with segments std::string filename; // cache file name std::string data; // cache decoded data // get the filename and data from the decoded article decoded->filename(filename, false); decoded->data(data); // open file if necessary if (!out_file.is_open()) out_file.open(filename.c_str(), std::ios_base::binary | std::ios_base::out); // are we at the right spot? if (decoded->multipart() && out_file.tellp() != decoded->begin() - 1) std::cout << "File '" << filename << "', segment " << the_segment->segment_number() << " at position " << out_file.tellp() << ", expected to be at " << decoded->begin() - 1 << std::endl; // write the data out_file.write(data.c_str(), data.length()); // close the file if (the_segment->segment_number() == segment_list.size()) out_file.close(); } |
Daar heb ik al gekeken. Kan daar niets vinden wat aangeeft waarom dit niet zou moeten werken.quote:Op maandag 24 januari 2011 23:59 schreef netolk het volgende:
misschien heb je hier iets aan?
http://www.cplusplus.com/reference/iostream/ostream/seekp/
krijg je ook een foutmelding (throw) zo ja welke?
Het beste van beidequote:Op dinsdag 25 januari 2011 00:49 schreef TeringHenkie het volgende:
Lekker aan het crossposten op GoT?![]()
a->b is hetzelfde als (*a).b (tenzij een van de operators overloaded is).quote:Op dinsdag 25 januari 2011 18:44 schreef minibeer het volgende:
wat doet "->" precies? ik zie het vaak bij "this" gebruikt worden, maar ik weet niet precies wat het betekent.
ah, pointers he, ik dacht dat ik ze wel doorhad maar het blijft wennen...quote:Op dinsdag 25 januari 2011 19:01 schreef thabit het volgende:
[..]
a->b is hetzelfde als (*a).b (tenzij een van de operators overloaded is).
WTF, heb je ergens een bron waar dit wordt uitgelegd? Dat is wel erg maf gedrag.quote:Op woensdag 26 januari 2011 07:42 schreef nightsleeper het volgende:
Bedankt voor alle hulp iedereen, het probleem zat hem in het feit dat een bestaand bestand openen en daarin zoeken alles weggooit tenzij je het bestand ook met std::ios_base::in opent.
http://stdcxx.apache.org/doc/stdlibug/30-3.htmlquote:Op woensdag 26 januari 2011 09:57 schreef Core2 het volgende:
[..]
WTF, heb je ergens een bron waar dit wordt uitgelegd? Dat is wel erg maf gedrag.
gebruik dan ook gewoon std::ifstream dan gaat het altijd goedquote:Op woensdag 26 januari 2011 07:42 schreef nightsleeper het volgende:
Bedankt voor alle hulp iedereen, het probleem zat hem in het feit dat een bestaand bestand openen en daarin zoeken alles weggooit tenzij je het bestand ook met std::ios_base::in opent.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class BUILDING{ //code }; class StoreHouse:public BUILDING{ // code public: unsigned get_Wood(); unsigned get_Stone(); }; Building::StoreHouse *SHptr; Building::BUILDING *Bptr;; for(unsigned i = 0; i < _BUILDINGS.size();i++){ if(_BUILDINGS[i].get_Name() == Names::nStoreHouse){ // checkt of het wel echt een StoreHouse is en geen ander gebouw *Bptr = _BUILDINGS[i]; *SHptr = reinterpret_cast<Building::StoreHouse*>(Bptr); _WOOD += SHptr->get_Wood(); _STONE += SHptr->get_Stone(); } } |
1 | error: no match for 'operator=' in '*SHptr = (Building::StoreHouse*)Bptr' |
wtf, dat is gewoon dom van mij...quote:Op donderdag 27 januari 2011 20:52 schreef thabit het volgende:
[ code verwijderd ]
Dat sterretje aan het begin hoort er niet.
1 | *Bptr = _BUILDINGS[i]; |
1 | Bptr = &(_BUILDINGS[i]); |
txs die haakjes hoeven nietquote:Op donderdag 27 januari 2011 21:45 schreef thabit het volgende:
Het probleem zit hem in
[ code verwijderd ]
Je roept hier een assignment operator aan, terwijl Bptr niet geinitialiseerd is. Kortom, je zit iets naar een min of meer random geheugenadres te kopieren. In plaats daarvan moet je
[ code verwijderd ]
doen. (Geen idee of die haakjes daar nodig zijn, te lui om op te zoeken.). Nog netter is het om zoveel mogelijk met references ipv pointers te werken, maar soit.
Tijdje terug maar AFAIK: Met references kun je niet goochelen, een pointer kun je echt overal naartoe laten wijzen. Je kunt met references dus minder snel fouten maken.quote:Op vrijdag 28 januari 2011 13:51 schreef netolk het volgende:
txs die haakjes hoeven nietmaar waarom is het netter om met references te werken ipv met pointers?
ow zo, ik weet niet zo veel van reference maar die kan je dan ook gewoon als class.function() gebruiken? als class een reference is naar die class?quote:Op vrijdag 28 januari 2011 13:56 schreef Catbert het volgende:
[..]
Tijdje terug maar AFAIK: Met references kun je niet goochelen, een pointer kun je echt overal naartoe laten wijzen. Je kunt met references dus minder snel fouten maken.
Het is erg lang geleden (10 jaar ofzo) dat ik serieus met C++ bezig ben geweest maar ja, in princiepe is het vrijwel hetzelfde als een pointer met het grote verschil dat je in een functie niet aan kunt passen waar een reference naar wijst.quote:Op vrijdag 28 januari 2011 14:06 schreef netolk het volgende:
ow zo, ik weet niet zo veel van reference maar die kan je dan ook gewoon als class.function() gebruiken? als class een reference is naar die class?
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |