Asensin tänään tuon Dev-C++ version 4.9.9.2. Paketissa oli mukana myös kääntäjä (MinGW)... Latasin ja asensin myös sdl:n, ja nyt jopa kun luo uuden projektin, niin saa jopa valittua projektin tyypiksi sdl:n (suuri edistys askel :D)! Ongelmaksi jäi kuitenkin se, että kun aloin opiskelemään sdl:n käyttöä noista oppaat osion oppaista, ja sitten ajattelin kääntää sekä ajaa kokeiluksi noita koodeja, niin ne kääntyy ilman erroria ainoastaan, jos koodi laitetaan main.cpp tiedostoon, ja jos taas projektiin luo uuden tiedoston ja koodin heittää siihen, niin se heittää kasapäin erroria, mistäs johtuu?!
Sitten olen huomannut sellaisen asian, että c++:ssa on aikas monta kirjoitusfunktiota kuten printf (ilmeisesti c:n standarti), fprintf sekä cout ja muistaakseni vielä muitakin, niin mistä tämä johtuu? Ja mitä näistä kannattaa käyttää c++ -ohjelmoinnissa? Onko näihin mitään tyylisääntöjä?
Mitä nämä määrittelyt "int argc, char *argv[]" oikein meinaavat, ja miksi ne pitää sisällyttää main -funktioon sdl:ää käyttäessä?
Mietin myös sdl:n ja openGL:n käyttämistä, kun ollaan tekemessä 3d -pelejä, eli onko idea openGL:ssä se, että se piirtää pelkästään näytölle 3d-graafikan ja ne varsinaiset kuvan objektit luodaan erillisellä mallinnusohjelmalla ja importaan openGL:llä? Vai voiko openGL:n funktioilla suoraan 'mallintaa' objekteja?
Lopuksi vielä ajattelin kysyä, että löytyykö netistä, mitään suomenkielistä tutoriaalia Windows Apin käytöstä?
Kiitos!
Triton kirjoitti:
ne kääntyy ilman erroria ainoastaan, jos koodi laitetaan main.cpp tiedostoon
Minkälaista virhettä tulee, jos tiedosto ei ole main.cpp?
Triton kirjoitti:
c++:ssa on aikas monta kirjoitusfunktiota kuten printf (ilmeisesti c:n standarti), fprintf sekä cout ja muistaakseni vielä muitakin, niin mistä tämä johtuu? Ja mitä näistä kannattaa käyttää c++ -ohjelmoinnissa? Onko näihin mitään tyylisääntöjä?
printf on tosiaan C:ltä peritty. Se kirjoittelee standarditulostusvirtaan kun taas fprintf, joka toimii muuten samoin, kirjoittaa tiedostoon (f = file). Vastaavasti sprintf kirjoittaa merkkijonoon.
Triton kirjoitti:
Mitä nämä määrittelyt "int argc, char *argv[]" oikein meinaavat, ja miksi ne pitää sisällyttää main -funktioon sdl:ää käyttäessä?
Parametrista argc löytyy ohjelmalle annettujen komentoriviparametrien määrä. Osoittimet itse parametreihin taas löytyvät taulukosta argv. Tietääkseni mikään ei pakota käyttämään noita main-funktion määrittelyssä.
Triton kirjoitti:
Mietin myös sdl:n ja openGL:n käyttämistä, kun ollaan tekemessä 3d -pelejä, eli onko idea openGL:ssä se, että se piirtää pelkästään näytölle 3d-graafikan ja ne varsinaiset kuvan objektit luodaan erillisellä mallinnusohjelmalla ja importaan openGL:llä? Vai voiko openGL:n funktioilla suoraan 'mallintaa' objekteja?
OpenGL on nimenomaan vain grafiikkakirjasto ja mallit tehdään erikseen. Mallit voi toki generoida ohjelman aikanakin, mutta OpenGL:stä siinä ei ole apua.
Tollasta erroria tulee:
multiple defenition of 'SDL_main'
first defined here
Id returned 1 exit status
[Build Error] [sdl_projekti.exe] Error 1
Huomasin myös, että jos luo uuden tiedoston projektiin, niin main -tiedostokaan ei enään toimi ja heittää samaa erroria. Ja ihmmettelen myös sitä, että vaikka laitoinkin rastin kohtaan C++ -projekti, niin main -tiedosto on kuitenkin c -päättäinen eli toisin sanoen c -tiedosto.
Projektiin olen uudet tiedostot luonut klikkaamalla projektit -kohdasta projektin nimiä hiiren oikealla näppäimellä ja valinnut 'New file'...
Mutta kiitos joka tapauksessa näistäkin vastauksista!
C:ssä on omansa (funktiot kuten *scanf ja *printf) ja C++:ssa omansa (*stream-luokat ja oliot (istream) cin ja (ostream) cout). Näistä siis pitää valita jompikumpi vaihtoehto. Muuta valittavaa ei ole, koska esimerkiksi printf, fprintf ja vsprintf tekevät eri asioita, kuten C++:ssa ofstream- ja ostringstream-luokat. Jälkimmäinen valinta siis riippuu vain käytöstä: tulostetaanko data ruudulle, tiedostoon vai tekstimuuttujaan jatkokäsittelyä varten?
Olet ehkä opetellut jo sen verran, että tiedät muuttujista ja funktioiden parametreista. Main-funktiollakin on parametrinsa. Ensimmäinen kertoo komentoriviparametrien määrän ja toinen taas on taulukko näistä parametreista (joista kukin on vielä merkkitaulukko). Oikea käyttöesimerkki löytyy esimerkiksi koodivinkkinä olevasta Brainfuck-tulkista. Nimet argc (argument count) ja argv (argument vector) ovat vain vakiintunut käytäntö, niillä ei tietenkään ole merkitystä, kuten vinkistäkin näkyy.
OpenGL on tosiaan vain piirtämistä varten, sillä ei voi edes "importata" objekteja, vaan ne täytyy itse ladata ja itse piirtää. OpenGL-piirto toimii yksinkertaistetusti (ilman tekstuureja ja muita kaunistuksia) suunnilleen näin:
Kolmioita: (kärki (x, y, z), kärki (x, y, z), kärki (x, y, z) ); (kärki (x, y, z), kärki (x, y, z), kärki (x, y, z) ); Loppu. Viivoja: (pää (x, y, z), pää (x, y, z) ); Loppu.
WinAPI-opasta en osaa neuvoa, mutta sen osaan, että älä kuvittele tosissasi sillä tekeväsi mitään. Kokemukseni mukaan melkein mikä tahansa muu on loogisempi, selkeämpi ja helpompi ja vaatii vähemmän koodia.
Et voi laittaa moneen tiedostoon samaa funktiota samassa ohjelmassa. Jokaisessa ohjelmassa pitää olla kutakin funktiota (kuten main) vain yksi kappale, ja eri ohjelmista pitää tehdä omat projektinsa.
Kun lähdetään toteuttaamaan Windows -ohjelmaa, missä on graafiset käyttöliittymät ym., niin kuinka usein komponentit 'ohjelmoidaan' ja kuinka usein ne piirretään graafisilla työkaluilla kuten Visual Studiossa?
vc++ lienee yleisin ammattikäytössä windows-puolella?
On yleensä kaksi tapaa toteuttaa käyttöliittymäkomponentteja. Staattista tapaa käytettäessä käyttöliittymäkomponenttien kokoonpano (kuten nappuloiden ja muiden kontrollien paikat, tekstit, tunnukset yms) määritellään erillisissä resurssitiedostoissa, joiden pohjalta käyttöliittymäympäristö osaa rakentaa todelliset käyttöliittymäkomponentit ohjelmoijan määrittämissä paikoissa. Komponentit voi myös rakentaa kokonaan itse dynaamisesti ohjelmakoodissa, mikä on yleensä tarpeen vain, jos komponentit muuttuvat tai niiden kokoonpano on tiedossa vasta ohjelman ajon aikana.
Molemmissa tapauksissa ohjelmakoodissa on luonnollisesti määriteltävä "mitä mistäkin nappulasta tapahtuu".
Resurssitiedostoilla on oma syntaksi ja niitä voi luoda graafisilla työkaluilla, jolloin käyttöliittymien teko luonnollisesti helpottuu.
Tässä yksi tutoriaali WinAPI:lle
http://www.winprog.org/tutorial/
WinAPI:n käyttö suoraan ei tosiaan taida olla enään tämän päivän juttu. Kannattaa ehkä mieluummin tutustua johonkin fiksumpaan systeemiin.
Ja näistä fiksummista systeemeistä esimerkkinä voisi antaa vaikkapa kirjastot GTK (GTK+, GTK2), wxWidgets ja fltk. Samalla saa ohjelmastaan porttautuvan, eli kyseiset kirjastot toimivat Windowsin lisäksi myös Linuxissa, Macissa ja monessa muussa. Useimmilla Microsoftin kehittämillä asioilla tätä ominaisuutta ei ole ensinkään.
Jos tehdä jonkilaisen FTP -ohjelman C++:ssa, niin mistä kirjastosta tälläiset komennot löytyisivät? Ja onko ylipäätään netissä jotain sivua, mistä voisi hakea tietoa, että missä kirjastossa mikäkin on ja missä olisi kerrot sen syntaksi? Esim. php.net on sellainen, mitä tarkoitan...
Esimerkiksi Google toimii tuollaisena kirjastona, kun osaa sopivasti tarpeensa muotoilla.
C++ ei itsessään sisällä verkko-ominaisuuksia, koska ne ovat perinteisesti kohtalaisen käyttöjärjestelmäriippuvaista ainesta. Jos ihan raaka socket-ohjelmointi C:llä kelpaa, Windowsissa on winsock.h ja muualla sys/socket.h, opastusta löytyy hakusanalla "socket programming". Rajapinta on sama WinSockin ylimääräisiä alustusfunktioita lukuun ottamatta. C++:lle on tehty oma luokkarajapinta (useitakin), joka sisältää samat toiminnot sekä kaikenlaista ylimäärästäkin ja on ehkä helpompi pitää koossa, jos kerran C++:aa kuitenkin käyttää. Yksi vaihtoehto on tietenkin myös SDL_net.
Pystyykö SDL_netillä luomaan ftp-clientin, luulin että se on vain pelejä varten... :O
vehkis91 kirjoitti:
Pystyykö SDL_netillä luomaan ftp-clientin, luulin että se on vain pelejä varten... :O
Ihan samanlaisia socketteja ne pelitkin käyttävät. SDL_net tarjoaa vain rajapinnan socketteihin ja verkkotoimintoihin, ylemmän tason protokollat (HTTP, FTP, etc.) ovat ohjelmoijan vastuulla. Ja mikä estäisi tekemästä peliä joka käyttää FTP-protokollaa.
Hyvä huomio... ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.