Op http://lesmateriaal.saxion.nl/gej/oopr/index.html , http://lesmateriaal.saxion.nl/gej/cpba1/index.html & http://lesmateriaal.saxion.nl/gej/cpro2/index.html staat ook wel wat. Ligt er maar net aan wat je nodig hebt.quote:Op woensdag 30 juni 2010 05:20 schreef xienixs het volgende:
Ben ondertussen de cplusplus tutorial aan het doornemen maar vroeg me af of er online boeken/documentatie beschikbaar is met opdrachten.
En of jullie misschien tutorials weten in de richting van bioinformatica?
Dit alles doe ik in Xcode en moet zeggen dat tot nu toe alles nog vlekkeloos werkt
Eh die staat hier: http://msdn.microsoft.com/en-us/library/ms683171(v=VS.85).aspxquote:The cursor position determines where characters written by the WriteFile or WriteConsole function, or echoed by the ReadFile or ReadConsole function, are displayed. To determine the current position of the cursor, use the GetConsoleScreenBufferInfo function.
ik krijg bij het compileren een fout melding:quote:Op zondag 4 juli 2010 16:56 schreef Cruise.Elroy het volgende:
Beetje googlen en je hebt het zo gevonden:
Op MSDN, zoeken naar SetConsoleCursorPosition:
http://msdn.microsoft.com/en-us/library/ms686025(VS.85).aspx
En dan halverwege de tekst:
[..]
Eh die staat hier: http://msdn.microsoft.com/en-us/library/ms683171(v=VS.85).aspx
1 |
1 2 3 4 5 | GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),myInfo); COORD myCoord = myInfo.dwCursorPosition; myCoord.X -=3; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),myCoord); |
Het is niet zo duidelijk, maar kijk goed naar het type en de naam van de tweede parameter:quote:BOOL WINAPI GetConsoleScreenBufferInfo(
__in HANDLE hConsoleOutput,
__out PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
);
1 2 3 4 5 | GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&myInfo); COORD myCoord = myInfo.dwCursorPosition; myCoord.X -=3; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),myCoord); |
Hèhè,quote:Op maandag 5 juli 2010 08:22 schreef Cruise.Elroy het volgende:
Ik zie het al, jij maakt een pointer aan die je niet initialiseert en die geef je mee aan de functie. Die pointer moet wijzen naar een struct waar Get....() zijn info in kan zetten. De "juiste" code is dus:
[ code verwijderd ]
Ik heb van myInfo een struct gemaakt ipv een pointer en deze reference ik naar een pointer met de -& opearator in de functieaanroep. (in mijn vorige post schreef ik myCoord, maar ik bedoelde natuurlijk myInfo)
De error die je kreeg sloeg op de regel waar je dus met een . operator pointer probeerde te benaderen in regel 3.
Dit is best wel basic stuff, misschien moet je je even inlezen in pointers, stack variabelen etc.
Omdat??quote:
Je compiler is gewoon hard-coded om PE-headers te compileren, inclusief ondersteuning voor platform-specifieke communicatie met de HAL. Volgens mij declareer je in de PE-header ook de communicatiekanalen naar je OS mbh functie-tabellen enzo, die via de exe-loader worden ingevuld.quote:Op zondag 1 augustus 2010 22:30 schreef TeringHenkie het volgende:
Wat ik me altijd heb afgevraagd: als je een Win32 programma compileert, vertel je tegen de linker/compiler/whatever dat het een .exe in PE formaat is. Je bent in het feite code aan het produceren die tegen de HAL praat. Maar als je een Linux kernel compileert, wat voor een code komt er dan uit? Wat is je target platform?
Dus als je een kernel bakt, compileer je puur tegen de CPU aan (met een of andere compilerflagje). Je bent dan alleen maar registertjes aan het vullen en interrupts aan het callen? (mooi gewrapt in C-codequote:Op zondag 1 augustus 2010 22:35 schreef Cruise.Elroy het volgende:
[..]
Je compiler is gewoon hard-coded om PE-headers te compileren, inclusief ondersteuning voor platform-specifieke communicatie met de HAL. Volgens mij declareer je in de PE-header ook de communicatiekanalen naar je OS mbh functie-tabellen enzo, die via de exe-loader worden ingevuld.
Linux heeft geen PE-type executables, maar ELF's.quote:Op zondag 1 augustus 2010 22:30 schreef TeringHenkie het volgende:
Wat ik me altijd heb afgevraagd: als je een Win32 programma compileert, vertel je tegen de linker/compiler/whatever dat het een .exe in PE formaat is. Je bent in het feite code aan het produceren die tegen de HAL praat. Maar als je een Linux kernel compileert, wat voor een code komt er dan uit? Wat is je target platform?
I know, maar het ging me meer om de compiler vs. kernel dan om het OS zelf. Welke optie geef je mee aan gcc om een kernel te bakken ipv. een (ELF-)binary?quote:Op zondag 1 augustus 2010 23:09 schreef Trollface. het volgende:
[..]
Linux heeft geen PE-type executables, maar ELF's.
Pak de makefile erbij, zou ik zeggenquote:Op zondag 1 augustus 2010 23:10 schreef TeringHenkie het volgende:
[..]
I know, maar het ging me meer om de compiler vs. kernel dan om het OS zelf. Welke optie geef je mee aan gcc om een kernel te bakken ipv. een (ELF-)binary?
SPOILEROm 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.
[CSS] voor dummies #15quote:Op donderdag 5 augustus 2010 16:23 schreef Pakspul het volgende:
Waarom werkt tekst transparantie in de volgende situatie niet?
[ code verwijderd ]
Zoals te zien is dat bij de eerste div situatie de tekst gewoon mooi wit is, maar bij de twee is de tekst ineens roodachtig ook al zou je anders verwachten
Als je totaal niet oplet dan lijkt Annemarie Jorritsma ook op Chantal Janzenquote:Op donderdag 5 augustus 2010 16:23 schreef Pakspul het volgende:
C++ lijkt een beetje op CSS als je totaal niet oplet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | int _tmain(int argc, _TCHAR* argv[]) { int (*fpoint)(int) = doeietsmetgetal; cout << fpoint(5); return 0; } int doeietsmetgetal(int x){ int * y = new int(x*5); return *y; } |
En hoe zorg ik ervoor dat y geen geheugen meer inneemt? Niet aanroepen met new? En hoe delete ik m'n fpoint? Of moet ik dan van die doeietsmetgetal functie gewoon een class maken? En mag ik aannemen dat zodra een variabele die zonder new is gedeclareerd verwijderd wordt zodra de functie exit?quote:Op donderdag 5 augustus 2010 18:10 schreef thabit het volgende:
*y blijft inderdaad geheugen innemen omdat je new aanroept. Ook als je *fpoint wel zou kunnen verwijderen, dan blijven alle *y instanties gewoon geheugen innemen.
Ok en m'n functiepointer? Valt die gewoon te verwijderen? Of moet ik 'm dan in de scope van een functie zien te proppen?quote:Op donderdag 5 augustus 2010 18:35 schreef thabit het volgende:
Locale (niet-static) variabelen van functies worden op de stack aangemaakt, en die stackruimte wordt vrijgegeven als je de functie verlaat. De pointer y wordt dus ook vrijgegeven, maar niet de int *y waar hij naar verwijst. Ook is fpoint een functiepointer, dus gewoon een locale variabele die wordt verwijderd zodra je de functie verlaat. In het bovenstaande voorbeeld kun je beter
int y = x*5; return y;
doen, of zelfs direct return x*5;
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 | class Point{ unsigned short X,Y; public: Point(unsigned short x,unsigned short y):X(x),Y(y) {} unsigned short get_X(){return X;} unsigned short get_Y(){return Y;} }; class Shape{ public: virtual void Rotate(int)=0; virtual void Draw()=0; virtual bool is_Closed()=0; }; class Circle:public Shape{ Point _CENTER; unsigned _RADIUS; void Rotate(int); public: Circle(Point p,unsigned r):_CENTER(p),_RADIUS(r){} void Draw(); bool is_Closed(){return true;} }; } |
1 2 3 4 5 6 7 | int main(){ shp::Circle myCircle(shp::Point(40,20),5); //myCircle.Draw(); return 0; } |
1 2 | collect2: ld returned 1 exit status |
Dat is toch raar want Circle zou toch gewoon een virtual table moeten hebben aangezien zijn base class puur virtueel is?quote:Op vrijdag 6 augustus 2010 13:56 schreef Cruise.Elroy het volgende:
even een recompile ofzo? hij zegt dat Circle geen virtual table heeft, en blijkbaar ergens niet als derived class is gedefinieerd?
Geen idee verder.
Hmm... daar heb je idd een puntquote:Op vrijdag 6 augustus 2010 14:44 schreef thabit het volgende:
Hij is public in Shape. Dus als je een object van type Shape hebt, en weet niet wat voor Shape het is, moet je wel Rotate erop kunnen aanroepen. Maar goed, dat terzijde.
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 | #define SHAPE_H namespace shp{ class Point{ unsigned short X,Y; public: Point(unsigned short x,unsigned short y):X(x),Y(y) {} unsigned short get_X(){return X;} unsigned short get_Y(){return Y;} }; class Shape{ public: virtual void Rotate(int)=0; virtual void Draw()=0; virtual bool is_Closed()=0; }; class Polygon:public Shape{ public: bool is_Closed(){return true;} }; class Circle:public Shape{ Point _CENTER; unsigned _RADIUS; public: Circle(Point p,unsigned r):_CENTER(p),_RADIUS(r){} void Rotate(int); void Draw(); bool is_Closed(){return true;} }; } #endif |
Ja, iknow ik heb geen .cpp file maar die heb ik voor classes toch ook niet nodig??quote:
Hehe, daar kwam ik idd ook net achter...quote:Op vrijdag 6 augustus 2010 15:18 schreef thabit het volgende:
Dan zit daar dus het probleem: de functies Circle::Rotate en Circle::Draw zijn alleen gedeclareerd, maar niet gedefinieerd. Dat vindt de linker niet zo grappig (vandaar ook een 'ld' error: het compilen gaat op zich goed, alleen het linken wil niet).
Maar hij roept Rotate en Draw niet aanquote:Op vrijdag 6 augustus 2010 15:18 schreef thabit het volgende:
Dan zit daar dus het probleem: de functies Circle::Rotate en Circle::Draw zijn alleen gedeclareerd, maar niet gedefinieerd. Dat vindt de linker niet zo grappig (vandaar ook een 'ld' error: het compilen gaat op zich goed, alleen het linken wil niet).
C++ is geen Python.quote:Op vrijdag 6 augustus 2010 15:23 schreef TeringHenkie het volgende:
[..]
Maar hij roept Rotate en Draw niet aan
jepquote:Op vrijdag 6 augustus 2010 15:31 schreef Cruise.Elroy het volgende:
Wel rare error voor een linkerfout. Maar is het nu gefixed?
hoe zo als reference dan? kost dan minder resources?quote:Op vrijdag 6 augustus 2010 15:25 schreef thabit het volgende:
Nog wat algemene opmerkingen: als je een base class aanmaakt, waar je classes van wilt afleiden, is het raadzaam om ook de destructor virtual te maken. En in de constructor van Circle kun je Point beter als reference doorgeven dan als value.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |